c# - sintaxis - para que sirve int en programacion
Longitud máxima de byte[]? (4)
Estoy tratando de crear una matriz de byte
cuya longitud es UInt32.MaxValue
. Esta matriz es esencialmente una pequeña (ish) base de datos en memoria:
byte[] countryCodes = new byte[UInt32.MaxValue];
En mi máquina, sin embargo, en tiempo de ejecución, obtengo una System.OverflowException
con "operación aritmética que resultó en un desbordamiento".
¿Cual es el trato? ¿Necesito usar un bloque unsafe
y malloc
? ¿Cómo haría eso en C #?
En .NET 4.5 La longitud máxima instantánea de una matriz de bytes es: 2147483591, o 56 menos que int.MaxValue. Encontrado a través de:
for (int i = int.MaxValue; i > 0; i--)
{
try
{
byte[] b = new byte[i];
Console.Out.WriteLine("MaxValue: " + i);
Environment.Exit(0);
}
catch (Exception ignored)
{}
}
La implementación actual de System.Array
utiliza Int32
para todos sus contadores internos, etc., por lo que el número máximo teórico de elementos es Int32.MaxValue
.
También hay un límite de 2 GB de tamaño máximo por objeto impuesto por el CLR de Microsoft.
Una buena discusión y solución aquí ...
Y algunas preguntas y respuestas relacionadas, no del todo duplicadas aquí ...
La longitud máxima de una matriz de bytes es: 2130702268. por ejemplo:
var countryCodes = new byte[2130702268];
Yo no haría esto en primer lugar. ¿Por qué querría poner toda esa memoria a un lado para esta base de datos en memoria? ¿No preferiría tampoco una estructura de datos con incrementos de tamaño a medida que avanza (por ejemplo, List<int>
)? ¿O (si lo prefiere) usar una base de datos en memoria como sqlite ?