この簡単なテスト プログラムを想像してみましょう。
static void Main(string[] args)
{
var length = 30000000;
var c = new List<object>();
for (int i = 0; i < length; i++)
{
c.Add(new object());
}
var start = DateTime.Now;
GC.Collect();
GC.WaitForFullGCComplete();
Console.WriteLine("GC took " + (DateTime.Now - start).TotalMilliseconds + " ms");
Console.ReadKey();
}
私のコンピューター (Framework 4.0、x64) では、出力は ~1.4 秒ですが、サンプルは ~1GB の RAM を消費します。
質問: ガベージ コレクションを高速化する方法はありますか? ベストプラクティスはありますか? クライアント アプリでの最大 1 GB のメモリ消費量は多いですが、それでもかなり妥当です。しかし、1 秒を超える遅延は、私の状況では受け入れられません。
おそらくサポートされないが、私を助けることができるアイデア:
- 一部のオブジェクトを無視するように GC に指示できますか?
- ヒープの一部で GC を実行するために、ヒープを複数の部分に分割できますか? (100ms の 10 倍の遅延が望ましいです。)