public static void Main()
{
int size = 250000;
var a = new int[size];
for (int i = 0; i < size; i++)
Console.WriteLine("{0}", a[i]);
}
Cuando probé el código anterior con CLRProfiler, me dijo que el código asigna aproximadamente 40 MB. Se asignan alrededor de 20 MB a String
, 9 MB a Char[]
, 5 MB a StringBuilder
y 3 MB a Int32
.Uso de memoria alta con Console.WriteLine()
public static void Main()
{
int size = 250000;
var a = new int[size];
for (int i = 0; i < size; i++)
Console.WriteLine("0");
}
Éste asigna alrededor de 5 MB. Se asignan 4 MB a Char[]
.
Lo único que obtengo es que la matriz a
debería requerir 1 MB (250,000 * 4).
¿Por qué hay una gran diferencia? ¿Por qué se requieren todos esos objetos para el primer código y cómo reduzco la asignación de memoria?
Y, probablemente, la cadena constante "0" está interna, por lo que solo existe una instancia de la misma. –