objects multidimensional initialize example array c# arrays

multidimensional - initialize array c#



La limitaciĆ³n del tamaƱo de la matriz.Net (5)

Escuché que hay un límite estricto en el tamaño de .Net Array . Se dice que la cantidad máxima de memoria que se puede asignar a cualquier instancia individual de un objeto Array (independientemente de si es int[] , double[] o su propia matriz) es de 2 GB. Y no, si tiene una máquina de 64 bits, el límite de 2 GB todavía está allí.

No estoy seguro de si mi impresión es correcta o no. ¿Alguien puede confirmar?


En las versiones de .NET anteriores a 4.5, el tamaño máximo del objeto es de 2 GB. A partir de 4.5, puede asignar objetos más grandes si está habilitado gcAllowVeryLargeObjects . Tenga en cuenta que el límite para la string no se ve afectado, pero las "matrices" también deberían cubrir las "listas", ya que las listas están respaldadas por matrices.




Hubiera pensado que el límite podría estar en el índice. Pensé que el índice utilizado tenía que ser un número entero, por lo que cualquier cosa más grande que un entero no funcionaría a menos que tuvieran alguna forma de evitarlo. Entonces eso sería 4294967296 elementos. No estoy seguro de si esto es siquiera verdad a medias. Me gustaría saber la respuesta yo mismo.

EDITAR: como señaló Tomtom, el entero generalmente se firma a menos que use un entero no firmado. Así que la mitad de 4294967296 o 2147483648 aproximadamente.


Primero se encontrará con un límite práctico: es bastante imposible obtener una matriz de 2gb asignada. Los límites prácticos que he encontrado están alrededor de la marca de los 800mb AT START DEL PROGRAMA - descendiendo drásticamente después de eso.

Cualquier cosa más grande que 64mb es una apuesta de suerte en 32 bits: el gran montón de objetos no está desfragmentado, por lo que necesitas 65 MB libres en una pieza o la asignación falla.

Los límites teóricos son:

  • memoria utilizable, especialmente menos de 32 bits.
  • Espacio de 32 bits para el índice (0 hacia arriba - sin números negativos para las matrices A MENOS QUE JUEGUES INTELIGENTES EN LA CREACIÓN). Puede crear matrices que permitan números negativos, pero no con la sintaxis estándar de C #, solo con reflexión.
  • 2 gb por objeto.

Pero en serio, las implicaciones prácticas son más grandes.

Para .NET 4.0 ... considere usar archivos mapeados en memoria;)