Мое приложение загружается с внешнего устройства. После каждой точки данных имеется короткий электронный мертвое время (около 10 мкс), в которое не может прибыть другая точка данных, которую мое приложение должно использовать для обработки и отображения данные на экране в диаграмме рассеяния. Моя самая важная цель - не превышать это электронное мертвое время. Как можно подойти к этой проблеме в приложении на основе WPF и каково было бы сравнение различных методов?
Вещи, которые я пробовал:
- Создание
Rectangle
вCanvas
для каждой прибывающей точки данных. Это слишком медленно в 10 раз. - Тот же подход, но рисунок
DrawingVisuals
в пользовательском элементе управления. Лучше, но все-таки слишком медленно. Добавление визуальных/логических дочерних элементов в дерево может иметь слишком много накладных расходов. - A
UserControl
, где все точки данных хранятся в массиве и отображаются в методеOnRender
. Здесь я должен снова нарисовать каждую точку при каждом вызове OnRender. Поэтому этот метод замедляется со временем, что нежелательно. Есть ли способ сказатьOnRender
не очищать экран на каждом проходе, чтобы я мог рисовать постепенно? - Отображение каждой точки в виде пикселя в
WriteableBitmap
. Кажется, это работает, но я не нашел способа определить, если недействительная часть Bitmap не добавляет несколько очень длительных ожиданий (если изображение действительно обновляется на экране). Любые идеи для измерения этого?
Edit:
В комментариях повышена точка буферизации данных и ее отображение с меньшей скоростью. Проблема с этим подходом заключается в том, что в какой-то момент мне приходится обрабатывать буфер. Выполнение этого во время измерения представляет собой длительное время, в течение которого моя система занята, и новые события будут отброшены. Поэтому иметь дело с каждой точкой индивидуально, но навсегда, было бы более желательным. Использование 10 мкс для запуска отображения для каждого события намного лучше, чем хранение его в буфер в мгновение ока и использование 100 мкс каждые 50 мс или около того для обработки накопленных событий.
I старые (т.е. не WPF) дни, вы можете, например, поместить необходимые данные в графическую память и иметь графическую карту с ней по своему усмотрению. Разумеется, на самом деле это не будет отображаться со скоростью быстрее 60 Гц, но вам не нужно было снова касаться этих данных.
Надеюсь, я разъяснил, каковы мои требования. Dang my English =)