2011-04-21 10 views
8

I tienen esta 2 ejemplos:DataPointCollection Claro rendimiento

1 Ejemplo:

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 es la clase de System.Windows.Forms.DataVisualization DLL

2 Ejemplo:

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 !!!!!!!!!! 
  • ¿Por qué hay tanta diferencia entre esos métodos Clear?
  • ¿Y cómo puedo borrar seria.Point más rápido?

Respuesta

8

Este es un problema muy conocido: http://connect.microsoft.com/VisualStudio/feedback/details/596212/performance-problem-in-mschart-datapointcollection-clear

solución sugerida es como a continuación:

public void ClearPointsQuick() 
    { 
     Points.SuspendUpdates(); 
     while (Points.Count > 0) 
      Points.RemoveAt(Points.Count - 1); 
     Points.ResumeUpdates(); 
    } 

Intrínsecamente, mientras que la limpieza de los puntos del visualizador de datos deben suspender las actualizaciones ya, pero que doesn' t! Así que la solución anterior funcionará aproximadamente un millón de veces más rápido que simplemente llamar a Points.Clear() (por supuesto hasta que se solucione el error real).

+0

¿por qué harías 'while (Points.Count> 0) ...' en lugar de simplemente llamar a 'Points.Clear()'? Ya suspendiste las actualizaciones, así que eso no sería un problema. – Andrey

+4

No conozco los detalles de implementación de Clear(), si tiene una llamada incorrecta a ResumeUpdates() u otra función que interactúa con el diseño. Por lo tanto, es mejor alejarse de Points.Clear() hasta que se solucione (de ahí el _workaround_). –

+0

Después de probar esto, parece que Points.Clear() hace/algo/y que lo anterior funciona mucho mejor – fbstj