【问题标题】:How to wait until memory has been freed?如何等到内存被释放?
【发布时间】:2023-03-12 22:31:01
【问题描述】:

我有一个 List,其中包含大约 800,000 个对象。完成此列表后,我将其设置为 null,然后继续执行其余的例程。

问题是 .NET 的垃圾收集器似乎没有足够快地完成它的工作,因为在将此列表设置为 null 后,内存使用量保持不变并且我得到“内存不足”例外。

有没有办法等待垃圾收集器完成它的工作?

也许我可以重新设计我的程序,这样我就不会一次加载 800,000 个项目,但这是一个一次性运行的程序,根本不会在生产中使用。

谢谢!

【问题讨论】:

标签: c# memory-management out-of-memory


【解决方案1】:

你可以打电话:

GC.Collect();
GC.WaitForPendingFinalizers();
//I have occasionally seen an extra call to GC.Collect() here

但是,我真的只是将其作为测试,看看它是否有帮助并确定 GC 是否是问题所在。

我假设您已经在 DebugRelease 模式下测试过东西。

最后一点,您可能会考虑更改 GC Latency Mode

【讨论】:

  • 在发布模式下测试,就像在调试模式下一样,在完成 List 后到达那个确切点是 WAYY 很长...
【解决方案2】:

如果绝对必要,您可以强制 GC 执行收集:

GC.Collect()

【讨论】:

    【解决方案3】:

    GC.Collect() 强制垃圾收集器立即运行。

    【讨论】:

      【解决方案4】:

      我最终也使用了 List.Clear()。这会快速地破坏对象并很快释放资源。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-27
        • 1970-01-01
        • 2012-02-19
        • 2011-01-31
        相关资源
        最近更新 更多