public static void Main()
{
int size = 250000;
var a = new int[size];
for (int i = 0; i < size; i++)
Console.WriteLine("{0}", a[i]);
}
Kiedy przetestowałem powyższy kod przy pomocy CLRProfiler, powiedział mi, że kod przydziela około 40 MB. Około 20 MB jest przydzielone na String
, 9 MB na Char[]
, 5 MB na StringBuilder
i 3 MB na Int32
.Zwiększone wykorzystanie pamięci dzięki Console.WriteLine()
public static void Main()
{
int size = 250000;
var a = new int[size];
for (int i = 0; i < size; i++)
Console.WriteLine("0");
}
Ten przydziela około 5 MB. 4 MB jest przydzielone na Char[]
.
Jedyne co otrzymuję to to, że tablica a
powinna wymagać 1 MB (250 000 * 4).
Dlaczego istnieje tak ogromna różnica? Dlaczego wszystkie te obiekty są wymagane dla pierwszego kodu i jak zmniejszyć alokację pamięci?
I prawdopodobnie stały ciąg "0" jest internowany, więc istnieje tylko jedna jego instancja. –