una tamaño saber recorrer multidimensionales matriz matrices imprimir generar dinamica cuadrada consola como c# arrays

tamaño - recorrer matriz c#



¿Cuál es el tamaño máximo que puede contener una matriz? (7)

Aquí hay una respuesta a su pregunta que entra en detalles: http://www.velocityreviews.com/forums/t372598-maximum-size-of-byte-array.html

Es posible que desee mencionar qué versión de .NET está utilizando y el tamaño de su memoria.

Sin embargo, quedarás atrapado en un 2G, para tu aplicación, aunque el límite depende de lo que hay en tu matriz.

En C # 2008, ¿cuál es el tamaño máximo que puede contener una matriz?


Como Length es una int, diría Int.MaxValue


Creo que está vinculado con el espacio de tu memoria RAM (o probablemente la memoria virtual) y el máximo absoluto restringido a tu versión del sistema operativo (por ejemplo, 32 bits o 64 bits)


Creo que si no consideras la VM, es Integer.MaxValue


Por MSDN es

De forma predeterminada, el tamaño máximo de una matriz es de 2 gigabytes (GB).

En un entorno de 64 bits, puede evitar la restricción de tamaño configurando el atributo enabled del elemento de configuración gcAllowVeryLargeObjects en true en el entorno de tiempo de ejecución.

Sin embargo, la matriz aún estará limitada a un total de 4 mil millones de elementos .

Consulte aquí http://msdn.microsoft.com/en-us/library/System.Array(v=vs.110).aspx

Nota: Aquí me estoy enfocando en la longitud real de la matriz suponiendo que tendremos suficiente RAM de hardware.


Esta respuesta es sobre .NET 4.5

Según MSDN , el índice para la matriz de bytes no puede ser mayor que 2147483591. Para .NET anterior a 4.5, también fue un límite de memoria para una matriz. En .NET 4.5 este máximo es el mismo, pero para otros tipos puede ser hasta 2146435071.

Este es el código para la ilustración:

static void Main(string[] args) { // ----------------------------------------------- // Pre .NET 4.5 or gcAllowVeryLargeObjects unset const int twoGig = 2147483591; // magic number from .NET var type = typeof(int); // type to use var size = Marshal.SizeOf(type); // type size var num = twoGig / size; // max element count var arr20 = Array.CreateInstance(type, num); var arr21 = new byte[num]; // ----------------------------------------------- // .NET 4.5 with x64 and gcAllowVeryLargeObjects set var arr451 = new byte[2147483591]; var arr452 = Array.CreateInstance(typeof(int), 2146435071); var arr453 = new byte[2146435071]; // another magic number return; }


System.Int32.MaxValue

Suponiendo que te refieres a System.Array , es decir. cualquier matriz normalmente definida ( int[] , etc.). Este es el número máximo de valores que puede contener la matriz. El tamaño de cada valor solo está limitado por la cantidad de memoria o memoria virtual disponible para almacenarlos.

Este límite se aplica porque System.Array usa un Int32 como su indexador, por lo tanto, solo se pueden usar valores válidos para un Int32 . Además de esto, solo se pueden usar valores positivos (es decir, >= 0 ). Esto significa que el límite superior máximo absoluto en el tamaño de una matriz es el límite superior máximo absoluto de los valores para una Int32 , que está disponible en Int32.MaxValue y es equivalente a 2 ^ 31, o aproximadamente 2 mil millones.

En una nota completamente diferente, si te preocupas por esto, es probable que estés usando una gran cantidad de datos, ya sea de forma correcta o incorrecta. En este caso, analizaría el uso de una List<T> lugar de una matriz, de modo que solo utilice la memoria que necesite. De hecho, recomendaría usar una List<T> u otro de los tipos de colecciones genéricas todo el tiempo. Esto significa que solo se asignará la cantidad de memoria que esté utilizando, pero puede usarla como lo haría con una matriz normal.

La otra colección de notas es Dictionary<int, T> que puede usar también como una matriz normal, pero solo se poblará escasamente. Por ejemplo, en el siguiente código, solo se creará un elemento, en lugar de los 1000 que crearía una matriz:

Dictionary<int, string> foo = new Dictionary<int, string>(); foo[1000] = "Hello world!"; Console.WriteLine(foo[1000]);

Usar Dictionary también le permite controlar el tipo de indexador y le permite usar valores negativos. Para la matriz dispersa de tamaño máximo absoluto, puede usar un Dictionary<ulong, T> , que proporcionará más elementos potenciales de los que podría pensar.