public static void Main()
{
int size = 250000;
var a = new int[size];
for (int i = 0; i < size; i++)
Console.WriteLine("{0}", a[i]);
}
Quando ho provato il codice precedente con CLRProfiler, mi ha detto che il codice alloca circa 40 MB. Circa 20 MB è assegnato a String
, 9 MB a Char[]
, 5 MB a StringBuilder
e 3 MB a Int32
.Utilizzo 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");
}
Questo alloca circa 5 MB. 4 MB sono assegnati a Char[]
.
L'unica cosa che ottiene è tale matrice a
dovrebbe richiedere 1 MB (250.000 * 4).
Perché c'è una differenza così grande? Perché tutti gli oggetti sono necessari per il primo codice e come posso ridurre l'allocazione della memoria?
E probabilmente la stringa costante "0" è internata, quindi esiste solo una sua istanza. –