multidimensional matriz initialize example create bidimensional array .net arrays memory

.net - matriz - multidimensional array c#



¿Cuál es el propósito de LongLength para.Net Arrays? (4)

¿Cuál es el propósito de la propiedad LongLength para matrices en .Net. Usando un entero estándar para la longitud, puede acomodar hasta 2 mil millones de índices. ¿Realmente hay personas que usan .Net para mantener un solo arreglo con más de 2 billones de elementos? Incluso si cada elemento fuera un byte único, eso seguiría siendo de 2 GB de datos. ¿Es factible usar una matriz tan grande en .Net?


Es muy posible tener una matriz con más de 2 mil millones de entradas en un escenario de 64 bits. LongLength está hecho para apoyar tales escenarios.

En cuanto a si realmente se usa o no. Puedo decir con certeza que hay algún cliente, en algún lugar, que considera que esta es una necesidad empresarial vital. Los clientes encuentran usos para funciones que nunca creíste posibles.


Además, devuelve la cantidad total de elementos en todas las dimensiones de la matriz, por lo que puede ser una matriz con "solo" medio billón de elementos y 4 dimensiones para hacer que sea de 64 bits int.


Por ejemplo, si tiene un archivo de> 2 GB y necesita leerlo todo en la memoria a la vez, eso requeriría dicha matriz. No es que sea necesariamente un enfoque recomendado la mayor parte del tiempo, pero bien podría haber algún caso (en un sistema lo suficientemente poderoso de 64 bits con mucha memoria de todos modos) que esto podría ser necesario (¿quizás por razones de rendimiento?).

Editar: Por supuesto, se debe tener en cuenta que a partir de CLR 2.0, no es posible tener una matriz> 2 GB (toda la implementación de LongLength hace es lanzar Longitud a una larga, y el intento de crear una matriz más grande fallará) ... pero tal vez Microsoft está planeando agregar soporte más tarde ...?


Hay una escuela de pensamiento conocida como la escuela "0, 1 o N" que cree que no debes tener nada de algo; uno de algo; o cualquier cantidad de algo, según lo permitan los recursos.

En otras palabras, no establezca límites arbitrarios si no es necesario. Los límites arbitrarios nos han dado monstruosidades como:

  • el límite de 640 K en las primeras PC.
  • vulnerabilidades de desbordamiento de búfer.
  • el espantoso esquema de direccionamiento de disco CHS.

Tenga en cuenta que incluso dos mil millones de enteros de 64 bits solo ocupan

17,179,869,184 bytes of the 18,446,744,073,709,551,616 bytes of 64-bit address space available.

Eso es menos de 1 mil millonésima, o 10 -9 , o puede tener muchos millones de estos arrays masivos antes de quedarse sin espacio de direcciones.