Как построить график потоковых данных на C#
-
06-07-2019 - |
Вопрос
Мне нужно составить график потоковых данных (9600 бод), которые поступают в виде 2-4-байтовых пакетов с последовательного порта.Пакеты должны быть обработаны перед построением графиков.В настоящее время я вызываю событие для каждого полного пакета, что вызывает проблемы с отзывчивостью графической формы.
Что является лучшим решением этой проблемы:
- Буферизуйте данные и создавайте буферизованные данные в событии с заданными интервалами (т.е. 500 миллисекунд)
- Создайте буфер и разрешите объекту создания экземпляра выполнять опрос на наличие буферизованных данных / пустой буфер при опросе
- Другое (?)
Решение
Я бы определенно ограничил частоту обновления.Для таких приложений обычно достаточно одного раза в 300 мс.
Исходя из этого, хорошей реализацией был бы рабочий поток, который считывает последовательный порт и добавляет его в буфер.Поток пользовательского интерфейса может использовать таймер для запроса данных и обновления отображения.
Используя отдельные потоки, рабочий поток может выполняться с более высоким приоритетом, так что скачки нагрузки могут задерживать обновления дисплея, но данные не теряются.
Еще один трюк заключается в том, чтобы не использовать фиксированный таймер, а перезапустить таймер после завершения обновления.Таким образом, если обновление занимает значительное время, напримериз-за высокой загрузки системы ваши обновления замедляются, что эффективно снижает нагрузку.