|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
Я получаю данные по серийному порту и отображаю их в RichTextBox. Код: c# 1. 2. 3. 4. 5. 6. 7.
все работает хорошо пока серийный порт не начинает строчить с большой скоростью. тогда все виснет через пару секунд. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 12:08 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
Пробуй читать данные в другом потоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 13:34 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
vb_sub Пробуй читать данные в другом потоке. прием по серийному порту происходит в отдельном потоке. а читаю я из потока GUI. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 13:42 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
>jenya7, сегодня, 13:42 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1327954&msg=22177005][22177005] >...а читаю я из потока GUI. < Попробуйте писать в файл (кто даёт ошибку). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 14:21 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
ВМоисеев >jenya7, сегодня, 13:42 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1327954&msg=22177005][22177005] >...а читаю я из потока GUI. < Попробуйте писать в файл (кто даёт ошибку). в файл пишет без проблем. затык скорее всего в контроле. он не справляется с потоком данных. я всегда подозревал что RichTextBox дохленький но ничего другого в наличии нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 14:28 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
jenya7 в файл пишет без проблем. затык скорее всего в контроле. он не справляется с потоком данных. я всегда подозревал что RichTextBox дохленький но ничего другого в наличии нету. При чем здесь RTB? Любой контрол заткнется, если в него пихать данные из другого потока с определённой скоростью. И Invoke здесь не поможет вообще - он лишь делает синхронизацию с потоком-владельцем. И BeginInvoke тоже не поможет. Здесь надо в читающем потоке заполнять буфер определённого размера (размер зависит от скорости поступления данных), по заполнению буфера, или по таймауту поступления очередной порции данных вываливать буфер в контрол. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 15:28 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, с языка снял. Я бы еще глянул в сторону DataFlow. Там и буферизация из коробки и как мне кажется с последовательным портом работать будет загляденье. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 15:38 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
Вообще какой смысл выводить данные в контрол для чтения пользователем, если скорость их поступления настолько высока. У Вас пользователи читают и форматируют текст из RichTextbox быстрее, чем они читаются из серийного порта?Скорее всего нужен другой контрол, фильтрация, агрегирование данных в общем пересмотр UI/UX. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 15:39 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
Сон Веры Павловны jenya7 в файл пишет без проблем. затык скорее всего в контроле. он не справляется с потоком данных. я всегда подозревал что RichTextBox дохленький но ничего другого в наличии нету. При чем здесь RTB? Любой контрол заткнется, если в него пихать данные из другого потока с определённой скоростью. И Invoke здесь не поможет вообще - он лишь делает синхронизацию с потоком-владельцем. И BeginInvoke тоже не поможет. Здесь надо в читающем потоке заполнять буфер определённого размера (размер зависит от скорости поступления данных), по заполнению буфера, или по таймауту поступления очередной порции данных вываливать буфер в контрол. а как? так можно? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 15:44 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
Roman Mejtes Сон Веры Павловны, с языка снял. Я бы еще глянул в сторону DataFlow. Там и буферизация из коробки и как мне кажется с последовательным портом работать будет загляденье. где такой есть - DataFlow? в Windows Form не нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 15:46 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
vb_sub Вообще какой смысл выводить данные в контрол для чтения пользователем, если скорость их поступления настолько высока. У Вас пользователи читают и форматируют текст из RichTextbox быстрее, чем они читаются из серийного порта?Скорее всего нужен другой контрол, фильтрация, агрегирование данных в общем пересмотр UI/UX. для отладки очень удобно. в контроллере бежит скрипт и нужно видеть результат его работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 15:49 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
jenya7, почему именно RichTextBox? Тебе нужна возможность редактировать и форматировать выводимый текст? Если просто читать, то вполне и Label хватит. Тем более тебе нужна какая-то структура, которая реализует Paging данных, то есть старые просмотренные данные должны удаляться из Label, чтобы не было переполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 16:04 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
vb_sub jenya7, почему именно RichTextBox? Тебе нужна возможность редактировать и форматировать выводимый текст? Если просто читать, то вполне и Label хватит. Тем более тебе нужна какая-то структура, которая реализует Paging данных, то есть старые просмотренные данные должны удаляться из Label, чтобы не было переполнения. редактировать и форматировать не нужно в принципе. но какая существенная разница между Label и RichTextBox ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 16:07 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
jenya7, процентов на 95, то что label не исправит коренным образом ситуацию, но существенная разница в том что label как объект проще и теоретически должен работать быстрее, потому что у него проще структура. Ну и визуально он состоит из меньшего количества объектов, соответственно и рендерить легче. Ну а если прямо хочется до конца идти со своей идеей записи всего в контрол, то лучше попробовать следующий способ. 1) Эмпирически определяешь с какой частотой можно писать в RichTextBox и он визуально не тормозит. 2) Организуешь очередь из сообщений с серийного порта и отправляешь их в контрол с этой периодичностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 16:14 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
>jenya7, сегодня, 14:28 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1327954&msg=22177033][22177033] >в файл пишет без проблем. затык скорее всего в контроле… < Попробуй использовать циклический буфер между серийным портом и RichTextBox. Если нагрузка пульсирующая, то можно добиться ок, иначе будет потеря сообщений. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 16:56 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
vb_sub процентов на 95, то что label не исправит коренным образом ситуацию Но это не отменяет необходимость буферизации. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 16:59 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
Shocker.Pro Процентов 95, что исправит ситуацию, ибо RTB тормозной очень. Неизвестно, с какой скоростью там поступают пакеты. Оконную очередь (через которую идёт вся синхронизация в винформс) без проблем загрузить до фризов UI и на обычном label. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2020, 17:24 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
Возможно применение Channels в данной ситуации поможет уменьшить MemoryAllocation и контрол станет работать повеселее. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2020, 12:54 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
да. с буферизацией работает хорошо. обнаружил еще проблему - если попытаться закрыть форму во время приема сообщений - форма виснет намертво. пробовал Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
не помогло. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2020, 16:08 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
виснет тут Код: c# 1. 2.
невозможно закрыть принимающий порт. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2020, 16:24 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
так тоже виснет Код: c# 1. 2.
всё? всё пропало? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2020, 16:47 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
нашел в чем проблема. в DataReceivedHandler вместо Код: c# 1.
нужно использовать Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 08:28 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
сделали еще хуже, на самом деле. вместо того, чтоб сделать как вам советовали, вы еще больше наговнокодили ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 08:33 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
Roman Mejtes сделали еще хуже, на самом деле. вместо того, чтоб сделать как вам советовали, вы еще больше наговнокодили мне много чего советовали, но конкретных примеров я так и не увидел. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 08:55 |
|
GUI виснет на больших объемах данных
|
|||
---|---|---|---|
#18+
jenya7 но конкретных примеров я так и не увидел. Да мы в принципе можем и сделать всё за Вас. За соответствующую оплату. Без неё - для человека, который в голову не только ест, вполне достаточно того, что было приведено выше. Если что-то непонятно, то вполне можно задать доп. вопросы, но требовать чего-то большего несколько странно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2020, 09:45 |
|
|
start [/forum/topic.php?fid=20&msg=39986097&tid=1398500]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
others: | 266ms |
total: | 423ms |
0 / 0 |