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 は 現在の領域の倍の領域を確保していきます
この領域は List.Capacity
で確認することができます
この際に2倍の領域の確保が嫌であれば List.Capacity
を直接変更してあげれば
その領域分を確保できるのでそちらのほうがいいかもしれません