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でテストしたところ、約40MBのコードが割り当てられていると言われました。 String
に約20MB、Char[]
に9MB、StringBuilder
に5MB、Int32
に3MBが割り当てられています。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を割り当てます。 Char[]
には4MBが割り当てられます。
私が得る唯一のことは、配列a
には1 MB(250,000 * 4)が必要です。
なぜこのような大きな違いがありますか?最初のコードでこれらのオブジェクトがすべて必要なのはなぜですか。また、どのようにしてメモリの割り当てを減らすことができますか?
おそらく定数の文字列 "0"は内部に格納されているため、インスタンスが1つしか存在しません。 –