4

C# が参照しなくなった後、メモリに保持している大きな構造体のためにメモリを解放しないというひどい時間を過ごしています。

以下に、私が抱えている問題と同様の問題を示すコードをいくつか含めました。次のコードがメモリ不足例外をスローする理由がわからないため、GC について何か誤解しているに違いないと思います。

私が含めたコードがメモリ不足になる理由を知っている人はいますか? 保持されているリストはなく、すぐにクリーンアップできます。

ありがとう、

ポール

Repro: 真新しい 4.5 コンソール アプリケーション、コードを Main に貼り付けます。

for ループの最初の反復で、3 番目の「新しいリスト」で例外がスローされます。for ループを省略した場合、OOM は発生しません。

for (var i = 0; i < 100; i++)
{
    new List<int>(100 * 1000 * 1000);
    GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
    new List<int>(100 * 1000 * 1000);
    GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
    new List<int>(100 * 1000 * 1000);
    GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
    new List<int>(100 * 1000 * 1000);
    GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
}
4

1 に答える 1