繁体   English   中英

如何等待直到内存被释放?

[英]How to wait until memory has been freed?

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

问题在于.NET的垃圾收集器似乎没有足够快地完成其工作,因为在将此列表设置为null之后 ,内存使用率保持不变,并且出现“内存不足”异常。

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

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

谢谢!

您可以致电:

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

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

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

最后一点,您可能会希望更改GC Latency Mode

如果绝对必要,则可以强制GC执行以下操作:

GC.Collect()

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

我最终也使用了List <>。Clear()。 这样可以使对象快速变化,并很快释放资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM