Эффективность DataPointCollection
У меня есть два примера:
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 !!!!!!!!!!
- Почему существует такая огромная разница между этими Clear методами?
- И как я могу очистить seria.Point быстрее?
Ответы
Ответ 1
Это очень известная проблема: проблема с производительностью в MSChart DataPointCollection.Clear()
Предлагаемый обходной путь показан ниже:
public void ClearPointsQuick()
{
Points.SuspendUpdates();
while (Points.Count > 0)
Points.RemoveAt(Points.Count - 1);
Points.ResumeUpdates();
}
По сути, при очистке точек визуализатор данных должен уже приостановить обновления, но это не так! Таким образом, вышеупомянутый обходной путь будет работать примерно в миллион раз быстрее, чем простой вызов Points.Clear()
(конечно, пока фактическая ошибка не будет исправлена).