动态添加点到C#图表的性能问题

时间:2014-03-10 08:38:21

标签: c# charts mschart

我有一张超过16000+点的大图表。在动态地将一个点添加到图表的末尾时,图表因此面临重大的重绘工作。当数据频率相当高时,图表几乎耗尽,CPU处于满载状态。

您是否有任何想法来优化此性能?

是否有可能让图表只重绘新部分而不是整个图表?我只是简单地使用AddXY来添加新的点集。我可以看到,只要我添加动态代码,程序就会被卡住。

fullChart.Series["LastPriceSeries"].Points.AddXY(time, mktData.LastPrice);
fullChart.Series["HighSeries"].Points.AddXY(time, mktData.AskPrice1);
fullChart.Series["LowSeries"].Points.AddXY(time, mktData.BidPrice1);
fullChart.Series["VolumeSeries"].Points.AddXY(time, volume);

提前致谢。

1 个答案:

答案 0 :(得分:4)

有几个优化MSCharts的技巧。

请尝试将代码部分包含在

中添加点的位置
mySerie.Points.SuspendUpdates();
...
mySerie.Points.ResumeUpdates();

16000点是很多。一种好的优化技术包括使用抽取算法将显示的点数量限制为图形的实际宽度。

我建议保留数组中所需的所有点,例如,然后使用移动平均值或简单地绕过数量点将其重新采样到另一个较小的数组。这是一个非常快速的过程。

然后,生成的数组可以直接绑定到MSChart系列。