小编ski*_*110的帖子

C# GC 不释放内存

我在 C# 中度过了一段糟糕的时光,在我不再引用它之后,它没有为我保存在内存中的大型结构释放内存。

我在下面添加了一些代码,这些代码展示了与我遇到的问题类似的问题。我想我一定是误解了关于 GC 的一些东西,因为我不确定为什么下面的代码会抛出内存不足异常。

有谁知道为什么我包含的代码会抛出内存不足?所有列表都不会被保留,并且可以立即清理。

谢谢,

保罗

重现:全新的 4.5 控制台应用程序,将代码粘贴到 Main 中。

在 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);
}
Run Code Online (Sandbox Code Playgroud)

c# garbage-collection

5
推荐指数
1
解决办法
4523
查看次数

标签 统计

c# ×1

garbage-collection ×1