c# - 如何等到内存被释放?

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

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

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

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

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

谢谢!

最佳答案

你可以调用:

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

但是,我实际上只是将此作为测试来查看它是否有帮助并确定 GC 是否是问题所在。

我假设您已经在 DebugRelease 模式下进行了测试。

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

关于c# - 如何等到内存被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14593114/

相关文章:

c++ - 纹理像素操作中更新方法的内存管理

java - 分析 Jar 的内存和 CPU 使用情况

java - R 中的 MemoryError while read.xlsx

java - 使用巨大的 ArrayLists,Java OutOfMemoryError : Java heap space. .. 使用 db?

c# - 是否有可能以强类型方式调用泛型方法,同时保持在编译时推断类型的能力?

c# - gridview使用时间戳更新更新 asp.net 时出错

c# - 直接调用 Azure Durable Functions 的 Activity 和 Sub-orchestrations

c# - 数据绑定(bind) Windows 窗体控件在失去焦点之前无法识别更改

c# - 我必须在 C# 中处理参数吗?

java - 如何清除内存以防止java.lang.OutOfMemoryError