うにてぃブログ

UnityやUnreal Engineの記事を書いていきます

【C#】List の初期サイズを指定した場合と指定しなかった場合

new  List<T>(1) のように List のインスタンス生成時に 要素数を指定すると
予め 領域を確保することができるため突然のGC を防ぐことができる

初期化のタイミングだと空の場合は 40B
指定した場合は 76 + サイズ * 4B (int の場合)

指定したサイズに満たない場合は何度 List.Add しても GCが発生することがありません

var list = new List<int>(1);


for (int i = 0; i < 8; i++)
{
    list.Add(i);
}

例えば上記の場合はサイズがオーバーした際に Listが更に領域を確保するために GC が発生しています
この際 List は 現在の領域の倍の領域を確保していきます

f:id:hacchi_man:20200715230258p:plain:w300

この領域は List.Capacity で確認することができます

この際に2倍の領域の確保が嫌であれば List.Capacity を直接変更してあげれば
その領域分を確保できるのでそちらのほうがいいかもしれません