public static void Main()
{
int size = 250000;
var a = new int[size];
for (int i = 0; i < size; i++)
Console.WriteLine("{0}", a[i]);
}
當我使用CLRProfiler測試上述代碼時,它告訴我代碼大概分配了40 MB。大約20 MB分配給String
,9 MB到Char[]
,5 MB到StringBuilder
和3 MB到Int32
。使用Console.WriteLine()的內存使用率很高
public static void Main()
{
int size = 250000;
var a = new int[size];
for (int i = 0; i < size; i++)
Console.WriteLine("0");
}
這一個分配大約5 MB。 4 MB分配給Char[]
。
我唯一得到的是數組a
應該需要1 MB(250,000 * 4)。
爲什麼會有這麼大的差異?爲什麼第一個代碼需要所有這些對象,以及如何減少內存分配?
可能常量字符串「0」被禁用,所以只存在它的一個實例。 –