我有一个 List<> ,里面有大约800,000个对象。完成此列表后,我将其设置为 null ,然后继续执行其余的例程。
问题是.NET的垃圾收集器似乎没有足够快地完成其工作,因为在将此列表设置为 null 之后,内存使用率保持不变并且我得到& #34;内存不足"异常。
有没有办法等待垃圾收集器完成它的工作?
也许我可以重新设计我的程序,所以我不能同时加载800,000个项目,但这是一次性的程序,根本不会在生产中使用。
谢谢!
答案 0 :(得分:5)
你可以打电话:
GC.Collect();
GC.WaitForPendingFinalizers();
//I have occasionally seen an extra call to GC.Collect() here
但是,我真的只是做一个测试,看它是否有帮助,并确定GC
是否是问题。
我假设您已经在Debug
和Release
模式下测试过。
最后请注意,您可能会考虑更改GC Latency Mode。
答案 1 :(得分:1)
如果绝对必要,您可以强制GC执行以下收集:
GC.Collect()
答案 2 :(得分:1)
GC.Collect()
强制垃圾收集器立即运行。
答案 3 :(得分:0)
我最终也使用了List<> .Clear()。这会在热量中消除对象并快速释放资源。