У меня есть 3 различных отображения графика, которые используют библиотеку MSChart для C #.Я обновляю графики данными, когда они становятся доступными в режиме реального времени.Функция, которая обновляет дисплей, запускается примерно каждые 40 мсек и работает примерно так:
private void UpdateDisplay()
{
// Process data for graph 1
// (Graph 1 has 2 Line graphs, and 1 Candlestick)
// Get the series
Charting.Series lineGraph1 = graph1.Series[0];
// ....process some data and generate new data....
// Update the data
for (int i = 0; i < displayedSamples; i++)
{
lineGraph1.Points[i].YValues[0] = newData[i];
// ....update other series' data....
}
// Redraw the graph
graph_1.Invalidate();
graph_1.Update();
// Process data for graph 2
// (Graph 2 has 1 bar graph)
// ...
graph_2.Invalidate();
graph_2.Update();
// Process data for graph 3 and update points
// (Graph 3 has 2 column graphs)
// ...
graph_3.Invalidate();
graph_3.Update();
}
Запуск приложения приводит к стремительному росту загрузки процессора приложением.Если я удаляю только вызовы «Invalidate ()», загрузка ЦП для приложения близка к 0%.
Набор точек в серии остается неизменным.Все точки добавляются при создании серии, а затем значения точек просто обновляются.
Я пытался улучшить производительность, делая недействительными только точки в отображаемой серии (т. Е. Graph_3.Series [0].Points.Invalidate ()), но это не оказало заметного эффекта.
Какие есть варианты повышения производительности?