我有一段糟糕的时间,C#没有释放内存,因为我没有再引用它,因此我在内存中保留了一个大的结构。C#GC没有释放内存
我已经在下面列出了一些代码,展示了一个类似的问题,我有一个。我想我一定是误解了一些GC,因为我不确定为什么下面的代码会抛出一个内存异常。
有谁知道我为什么包含的代码会导致内存不足?没有任何名单正在举行,他们立即可以清理。
感谢,
保罗
摄制:全新的4.5控制台应用程序,将代码粘贴到主。
异常将在for循环的第一次迭代中抛出在第三个“新列表”上。如果省略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);
}
在你的真实程序中,你使用GC吗?你应该尝试让程序尽可能地做自己的gc – Sayse
这里只是我的看法,但是如果你需要做大量细粒度的内存管理和GC,C#可能不适合这项工作。类似于C/C++可能更适合。 – Gray
以下哪一行会引发异常?第一个还是另一个? –