Как улучшить производительность WinForms MSChart?

Я составил некоторые простые таблицы (типа FastLine) с MSChart и обновляю их с живыми данными, как ниже:

MSCharts Level Chart

Для этого я связываю заметный набор пользовательского типа к диаграмме как так:

                // set chart data source
            this._Chart.DataSource = value; //is of type ObservableCollection<SpectrumLevels>

            //define x and y value members for each series
            this._Chart.Series[0].XValueMember = "Index";
            this._Chart.Series[1].XValueMember = "Index";
            this._Chart.Series[0].YValueMembers = "Channel0Level";
            this._Chart.Series[1].YValueMembers = "Channel1Level";

            // bind data to chart
            this._Chart.DataBind(); //lasts 1.5 seconds for 8000 points per series

В каждом обновлении полностью изменяется набор данных, это не обновление прокрутки!

С профилировщиком я нашел что DataBind() звоните занимает приблизительно 1,5 секунды. Другие вызовы незначительны.

Как я могу сделать это быстрее?

  • Я должен использовать другой тип, чем ObservableCollection? Массив, вероятно?
  • Я должен использовать другую форму привязки данных?
  • Есть ли некоторая тонкая настройка для MSChart, который я, возможно, пропустил?
  • Я должен использовать sparsed набор даты, имея одно значение на пиксель только?
  • Я просто достиг предела производительности MSCharts?

От типа приложения для хранения этого "быстрым" у нас должно быть несколько обновлений в секунду.

Спасибо за любые подсказки!

Править: Решение, как предложено leppie:

                this._Chart.Series[0].Points.Clear();
            foreach (var item in value) //iterates over the list of custom objects
            {
                    this._Chart.Series[0].Points.Add(new DataPoint
                    {
                        XValue = item.Index,
                        YValues = new double[] { item.Channel0Level.Value }
                    });

            }

Это теперь работает более двух раз как быстро!

9
задан Marcel 26 March 2013 в 10:45
поделиться

1 ответ

Используйте другие методы Bind, они очень быстрые.

Я обновляю около 15 серий по 3 областям, с 300 очками в каждой серии, каждую секунду, и никакого реального замедления.

5
ответ дан 3 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: