数据更改时WinForms Chart阻止UI [重复]

g6baxovj  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(148)

此问题在此处已有答案

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");

但没有用。

bjg7j2ky

bjg7j2ky1#

非常感谢你们。
首先,我测试了@TnTinMn建议(Points.SuspendUpdates和清除循环中的所有点,而不是Points.Clear)。它将清除示例图表的时间从400毫秒缩短到15毫秒。非常大的改进,但这只是UI被阻塞总时间的一半。
然后@Flydog57 - suspendUpdate()在添加点数时的建议缩短了近300毫秒。
现在下一步将按照@LarsTech的建议-减少要显示的样本数量(划分数据范围并计算每个范围的平均值)。为什么我没有想到这一点?
再次感谢大家。

相关问题