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.
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. –