Как я могу оптимизировать вызовы Invalidate () с помощью MSChart? - PullRequest
0 голосов
/ 18 июля 2011

У меня есть 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 ()), но это не оказало заметного эффекта.

Какие есть варианты повышения производительности?

...