DataPointCollection清除性能

Zlo*_*ton 10 c# collections mschart clear

我有这两个例子:

1示例:

    Series seria = new Series("name");
    for(int i = 0 ; i < 100000 ; i++)
    {
        seria.Points.Add(new DataPoint(i, i));
    }

    seria.Points.Clear(); // - this line executes 7.10 seconds !!!!!!!!!!
Run Code Online (Sandbox Code Playgroud)

Series来自System.Windows.Forms.DataVisualizationdll的课程

2示例:

    List<DataPoint> points = new List<DataPoint>();
    for (int i = 0; i < 100000; i++)
    {
        points.Add(new DataPoint(i, i));
    }

    points.Clear();   // - this line executes 0.0001441 seconds !!!!!!!!!!
Run Code Online (Sandbox Code Playgroud)
  • 为什么那些Clear方法之间存在如此巨大的差异?
  • 我怎样才能更快地清除seria.Point?

Teo*_*gul 9

这是一个众所周知的问题:http://connect.microsoft.com/VisualStudio/feedback/details/596212/performance-problem-in-mschart-datapointcollection-clear

建议的解决方法如下:

public void ClearPointsQuick()
{
    Points.SuspendUpdates();
    while (Points.Count > 0)
        Points.RemoveAt(Points.Count - 1);
    Points.ResumeUpdates();
}
Run Code Online (Sandbox Code Playgroud)

本质上,虽然清除点数据可视化器应该暂停更新,但事实并非如此!所以上面的解决方法将比简单地调用Points.Clear()快一百万倍(当然直到实际的bug被修复).

  • 我不知道Clear()的实现细节,无论是否调用ResumeUpdates()或与布局交互的其他函数.所以最好避开Points.Clear()直到它被修复(因此_workaround_). (4认同)