Por curiosidad quise probar el número de tics para comparar una Lista Generica contra una Lista de Arrays.¿Por qué una lista simple <T> parece ser más lenta que una ArrayList?
Y para el siguiente código cuando miro los cronómetros, ArrayList parece más rápido.
¿Hice algo mal o hay una explicación para esto? (Yo creía sto Lista ser mucho más rápido)
Código tesing y la salida por debajo de:
private static void ArrayListVsGenericList()
{
// Measure for ArrayList
Stopwatch w0 = new Stopwatch();
w0.Start();
ArrayList aList = new ArrayList();
for (int i = 0; i < 1001; i++)
{
Point p = new Point();
p.X = p.Y = i;
aList.Add(p);
}
foreach (Point point in aList)
{
int v0 = ((Point) aList[8]).X; //unboxing
}
w0.Stop();
// Measure for Generic List<Point>
Stopwatch w1 = new Stopwatch();
w1.Start();
List<Point> list = new List<Point>();
for (int i = 0; i < 1001; i++)
{
Point p = new Point();
p.X = p.Y = i;
list.Add(p);
}
foreach (var point in list)
{
int v1 = list[8].X;
}
w1.Stop();
Console.WriteLine("Watch 0 : " + w0.ElapsedTicks);
Console.WriteLine("Watch 1 : " + w1.ElapsedTicks);
Console.WriteLine("Watch 0 > Watch 1 : " + (w0.ElapsedTicks > w1.ElapsedTicks));
}
No creo que esta prueba sea confiable. La secuencia de ejecución del código es importante, para empezar. Agregar en la segunda lista puede sufrir las asignaciones anteriores. También 1000 elementos son un conjunto pequeño. Definitivamente debe separar el relleno y obtener de los dos tipos de listas en dos programas diferentes y luego probarlos usando un generador de perfiles, no cronómetros. – vulkanino
¿Cómo se ve al usar 'int's en lugar de' Point's? Al probar la lista genérica primero? –
Bueno, cuando aumente el número de elementos a 1000001, los genéricos son más rápidos. ¿Pero significa esto que los genéricos no se pueden considerar como MÁS RÁPIDOS cuando se trabaja en pequeños conjuntos de elementos? – pencilCake