Управление диаграммами в C # (.NET) использует тонны процессора

#c# #.net #charts #cpu-usage

#c# #.net #Диаграммы #загрузка процессора

Вопрос:

Я использую FastLineChart в C # для отображения сигнала с внешнего устройства в режиме реального времени. Частота дискретизации составляет около 700 Гц. В моей программе я уменьшаю частоту дискретизации примерно до 100 Гц, чтобы минимизировать ненужное разрешение дисплея, но все равно использую для этого слишком много процессора.

Я думаю, проблема в том, что я прокручиваю данные по диаграмме (как это делает график процессора в Windows), и это отнимает ресурсы. Я делаю это, удаляя самый старый элемент, а затем добавляя новый в определенный ряд (как показано ниже).

 timeGraph.Series[0].Points.RemoveAt(0);
timeGraph.Series[0].Points.AddY(average);
  

Загрузка процессора составляет около 30%, что, я думаю, немного завышено. У меня не самый новый компьютер, но это Code 2 Duo с видеокартой GT9600.

У кого-нибудь есть какие-либо предложения? Есть ли лучший способ сделать это? Или конкретный способ сделать это быстрее?

Спасибо за любую помощь!

Ответ №1:

Хорошо, итак, старый вопрос для ответа, но я целую вечность сталкивался с проблемой, подобной этой, так что для всех, кто найдет это:

Чтобы остановить массовую загрузку процессора:

1) объявите целое число

 int graphUdate = 0;
  

2) в form_ load добавьте

 chart1.Series.SuspendUpdates();
  

3) при добавлении точки к вашему графику используйте

 graphUpdate  ;
  

4) в том же пространстве обновляйте график каждые # количество точек и сбрасывайте graphUpdate

 if (graphUpdate == #)
            {
                chart1.Series.ResumeUpdates();
                chart1.Series.Invalidate();
                chart1.Series.SuspendUpdates();
                graphUpdate = 0;
            }
  

это обновляет все точки, собранные с момента последней chart1.Series.SuspendUpdates();

удаление точек также будет приостановлено, что существенно повлияет на загрузку процессора.

Ответ №2:

Я бы предположил, что проблема может заключаться в том, что вы используете Winforms. GDI работает довольно медленно при работе с анимированной графикой. Если возможно, переход на WPF определенно поможет. Однако, если элемент управления диаграммами не использует преимущества видеокарты, вам может потребоваться поискать другой элемент управления.