此问题在此处已有答案:
DataPointCollection Clear performance(1个答案)
2天前关闭。
我有一个显示图表的C# WinForms应用程序。每次源数据更改时,我都会这样做
foreach (var s in chart.Series)
s.Points.Clear();
foreach (var item in sourceData)
chart.Series["Prsr"].Points.AddY(item.Prsr);
问题是souceData可能有超过30k个条目。在我的例子中,上述方法会阻塞UI超过1秒。
有人知道避免这个问题的更好的方法吗?
源数据是List<obj>
我还尝试了DataBindY:
chartMain.Series["Prsr"].Points.DataBindY(sourceData, "Prsr");
但没有用。
1条答案
按热度按时间bjg7j2ky1#
非常感谢你们。
首先,我测试了@TnTinMn建议(Points.SuspendUpdates和清除循环中的所有点,而不是Points.Clear)。它将清除示例图表的时间从400毫秒缩短到15毫秒。非常大的改进,但这只是UI被阻塞总时间的一半。
然后@Flydog57 - suspendUpdate()在添加点数时的建议缩短了近300毫秒。
现在下一步将按照@LarsTech的建议-减少要显示的样本数量(划分数据范围并计算每个范围的平均值)。为什么我没有想到这一点?
再次感谢大家。