DataPointCollection Очистить производительность - PullRequest
10 голосов
/ 21 апреля 2011

У меня есть 2 примера:

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 !!!!!!!!!!

Series это класс из System.Windows.Forms.DataVisualization dll

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 !!!!!!!!!!
  • Почему между этими методами очистки так много различий?
  • И как быстрее очистить seria.Point?

1 Ответ

9 голосов
/ 21 апреля 2011

Это очень хорошо известная проблема: 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();
    }

По своей сути, при очистке точек визуализатор данных должен уже приостановить обновления, ноэто не так!Таким образом, вышеупомянутый обходной путь будет работать примерно в миллион раз быстрее, чем простой вызов Points.Clear () (конечно, пока фактическая ошибка не будет исправлена).

...