2010-10-11 15 views

Respuesta

66

El número máximo de elementos que se pueden almacenar en la implementación actual de List<T> es, teóricamente, Int32.MaxValue - poco más de 2 mil millones.

En la implementación actual de Microsoft del CLR, hay un límite máximo de tamaño de objeto de 2 GB. (Es posible que otras implementaciones, por ejemplo Mono, no tengan esta restricción.)

Su lista particular contiene cadenas, que son tipos de referencia. El tamaño de una referencia será de 4 u 8 bytes, dependiendo de si se está ejecutando en un sistema de 32 o 64 bits. Esto significa que el límite práctico para la cantidad de cadenas que podría almacenar será de aproximadamente 536 millones en 32 bits o 268 millones en 64 bits.

En la práctica, lo más probable es que se quede sin memoria asignable antes de llegar a esos límites, especialmente si se está ejecutando en un sistema de 32 bits.

+3

Además del límite superior fijo, la creación y liberación de arreglos grandes repetidamente puede llevar a una asignación inconsistente donde asignaciones aún más razonables (del orden de unos 100 MB) pueden causar OutOfMemoryException, aunque la memoria esté realmente disponible. Si tiene que lidiar con colecciones muy grandes, esto afectará su diseño. –

9

2147483647 porque todas las funciones desactivadas List están utilizando int.

Fuente de mscorlib:

private T[] _items; 
private int _size; 

public T this[int index] 
{ 
    get 
    { 
     //... 
    } 
} 
+1

No, esta respuesta no es buena. Solo podemos colocar casi 268 millones de referencias en un sistema operativo de 64 bits en el CLR en esta fecha, como se explica en la respuesta elegida. – Julien

+2

2,147,483,647 es mucho más grande que 268 millones. – sqweek

3

list.Count (a) Propiedad es int32, por lo que debe ser el límite de maxium int32 pero ¿cómo realiza su lista sobre este límite es una observación agradable.

si usted hace algunas operaciones de manupulación de la lista, sería más en teoría.

diría que si tiene una gran cantidad de artículos sobre las Colecciones Paralelas en .NET 4.0, esto haría que las operaciones de su lista sean más receptivas.

Cuestiones relacionadas