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

向C#图表动态添加点的性能问题,c#,charts,mschart,C#,Charts,Mschart,我有一张超过16000点的大图表。当动态地在图表的末尾添加一个点时,图表面临着一项繁重的重画工作。当数据频率相当高时,图表几乎处于死区,CPU处于满载状态 你有什么想法来优化这个性能吗 是否有可能只重新绘制新的部分而不是整个图表?我只是简单地使用AddXY在集合中添加新的点。我可以看到,只要我添加动态代码,程序就会被阻塞 fullChart.Series["LastPriceSeries"].Points.AddXY(time, mktData.LastPrice); fullChart.Ser

我有一张超过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);

提前感谢。

这里有几个优化MSChart的技巧

请尝试将添加点的代码部分括起来

mySerie.Points.SuspendUpdates();
...
mySerie.Points.ResumeUpdates();
16000分是很多。一种好的优化技术是使用抽取算法,将显示的点的数量限制在图形的实际宽度内

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


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

有几个技巧可以优化MSChart

请尝试将添加点的代码部分括起来

mySerie.Points.SuspendUpdates();
...
mySerie.Points.ResumeUpdates();
16000分是很多。一种好的优化技术是使用抽取算法,将显示的点的数量限制在图形的实际宽度内

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


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

因为我们看不到您的工作,所以无法回答您的问题。因为我们看不到您的工作,所以无法回答您的问题。有很多优化MSChart的技巧,这一个一定是第一个:谢谢答案。但这并没有达到目标。我认为主要的问题是绘制一张16000+的图表确实需要时间。每隔一秒钟,我就会增加两个点,这也需要图表重新绘制自己。我会想到其他方法,比如平衡点。有很多优化MSCharts的技巧,这一定是第一个:谢谢答案。但这并没有达到目标。我认为主要的问题是绘制一张16000+的图表确实需要时间。每隔一秒钟,我就会增加两个点,这也需要图表重新绘制自己。我会想其他办法,比如找平这一点。