Я составил некоторые простые таблицы (типа FastLine) с MSChart и обновляю их с живыми данными, как ниже:
Для этого я связываю заметный набор пользовательского типа к диаграмме как так:
// 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 секунды. Другие вызовы незначительны.
Как я могу сделать это быстрее?
От типа приложения для хранения этого "быстрым" у нас должно быть несколько обновлений в секунду.
Спасибо за любые подсказки!
Править: Решение, как предложено 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 }
});
}
Это теперь работает более двух раз как быстро!
Используйте другие методы Bind, они очень быстрые.
Я обновляю около 15 серий по 3 областям, с 300 очками в каждой серии, каждую секунду, и никакого реального замедления.