2009-11-13 8 views

Respuesta

20

La implementación actual de List<T> utiliza Int32todas partes - para construir su matriz de soporte, por su propiedad Count, como un indexador y para todas sus operaciones internas - por lo que hay una corriente teórico máximo de Int32.MaxValue artículos (2^31-1 o 2147483647).

Pero .NET Framework también tiene un límite máximo de tamaño de objeto de 2 GB, por lo que solo se acercará al límite de elementos con listas de elementos de un solo byte como List<byte> o List<bool>.

En la práctica, probablemente se quede sin memoria contigua antes de llegar a cualquiera de esos límites.

+2

* Teóricamente * eso significa que solo puede acceder aleatoriamente a los elementos hasta 'Int32.MaxValue', no cuántos elementos pueden haber, * teóricamente *, por supuesto. –

+1

@Martinho: Bueno, la implementación actual usa 'Int32' * en todas partes *, por lo que no es solo el acceso aleatorio el que está restringido a 2^31 elementos. (Por supuesto, el uso de 'Int32' internamente es solo un detalle de implementación, pero propiedades como el indexador y' Count' son parte del contrato público). – LukeH

Cuestiones relacionadas