如何等到内存被释放?

时间:2013-01-29 22:18:36

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

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

问题是.NET的垃圾收集器似乎没有足够快地完成其工作,因为在将此列表设置为 null 之后,内存使用率保持不变并且我得到& #34;内存不足"异常。

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

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

谢谢!

4 个答案:

答案 0 :(得分:5)

你可以打电话:

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

但是,我真的只是做一个测试,看它是否有帮助,并确定GC是否是问题。

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

最后请注意,您可能会考虑更改GC Latency Mode

答案 1 :(得分:1)

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

GC.Collect()

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我最终也使用了List<> .Clear()。这会在热量中消除对象并快速释放资源。