Производительность вне элементов управления диаграммами Windows C #?

#c# #performance #optimization #charts

#c# #Производительность #оптимизация #Диаграммы

Вопрос:

Удалось ли кому-нибудь добиться хорошей производительности встроенного в C # графика, работающего в режиме реального времени?

Я составил диаграмму с 3 областями построения графиков и 9 рядами, которые все относятся к типу быстрых линий. Я обновляю точки в серии в режиме реального времени и сдвигаю графики в течение 7 секунд после построения графика данных. Все это работает нормально, однако скорость обновления моих графиков ужасно низкая. Иногда для отображения на графике вводимых данных может потребоваться почти секунда (и много раз я задаюсь вопросом, точно ли он обновляет мой график моими данными, поскольку он такой медленный, а изменения данных могут быть такими быстрыми).

Я пробовал использовать mychart.Серии.SuspendUpdates(), Серия.ResumeUpdates() и Series.Invalidate (), как я видел в другой публикации, без заметных результатов.

Если бы кто-нибудь мог поделиться некоторыми соображениями о способах оптимизации, я был бы по-настоящему любезен.( и сокращение количества точек данных не является допустимой оптимизацией)

Заранее спасибо OCV

Комментарии:

1. Как и в любом другом вопросе о производительности, знаете ли вы, какой метод является самым дорогостоящим? Вы пробовали профилировщик?

2. Все это выполняется в одном потоке, или у вас есть обработчик данных и поток рисования?

3. Я планировал написать профилировщик и протестировать, где находятся узкие места, если я получу какие-либо жалобы на производительность графика от клиентов. Я почти уверен, что большая часть моего времени тратится на вызовы draw, у меня была часть кода с данными, работающая в программе, использующей 3D-графику для представления данных, и я получаю частоту кадров 200 кадров в секунду , поэтому я знаю, что данные вычисляются и поступают с разумной скоростью.

4. Что касается потоковой обработки, все это происходит в одном потоке, однако я подумывал о добавлении потока. Я хотел бы знать, добавит ли это в первую очередь значительную производительность.

Ответ №1:

Если возможны внешние библиотеки, ZedGraph отлично работал для меня при отображении данных с интервалом в 10 мс (до 8 серий).

Если вам действительно необходимо использовать встроенный C #, я думаю, вы могли бы предотвратить блокировку, разделив рисование данных на отдельные потоки.