我使用MSChart创建了一些简单的图表(类型为FastLine),并使用实时数据更新它们,如下所示:
为此,我将自定义类型的可观察集合绑定到图表,如下所示:
// 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 }
});
}
现在的速度提高了两倍以上!
答案 0 :(得分:5)
使用其他Bind方法,它们非常快。
我更新了大约15个系列超过3个区域,每个系列中每秒300分,并且没有真正的减速。