List<T>
se limitará al máximo de una matriz, que es de 2 GB (incluso en x64). Si eso no es suficiente, estás usando el tipo incorrecto de almacenamiento de datos. Sin embargo, puede ahorrar un montón de sobrecarga empezando por el tamaño correcto, pasando un int
al constructor.
Vuelva a su edición - con 134217728 x Int32, eso es 512MB. Recuerde que List<T>
usa un algoritmo de duplicación; Si está alimentando por goteo artículos a través de Add
(sin asignar todo el espacio primero) va a tratar de duplicar a 1GB (en la parte superior de los 512MB que ya tiene, el resto de su aplicación, y por supuesto la Tiempo de ejecución de CLR y bibliotecas). Supongo que está en x86, por lo que ya tiene un límite de 2 GB por proceso, y es probable que haya fragmentado su "montón de objetos grandes" en muerte mientras agrega elementos.
Personalmente, sí, parece correcto comenzar a obtener una memoria insuficiente en este punto.
Editar: en .NET 4.5, se permiten matrices de más de 2 GB si se ha activado el interruptor de <gcAllowVeryLargeObjects>
. El límite entonces es de 2^31 elementos. Esto podría ser útil para matrices de referencias (8 bytes cada una en x64), o una matriz de grandes struct
s.
@Tony - se mencionan (comentarios) que su memoria se debe agotando rápidamente ... cuál es el problema real es usted ¿viendo? –
@Marc, edité mi publicación con el problema –
Respuesta actualizada a tu actualización –