我有一个List<>,其中包含大约 800,000 个对象。完成此列表后,我将其设置为null,然后继续执行其余的例程。
问题是 .NET 的垃圾收集器似乎没有足够快地完成它的工作,因为在将此列表设置为null后,内存使用量保持不变,并且出现“内存不足”异常。
有没有办法等待垃圾收集器完成它的工作?
也许我可以重新设计我的程序,这样我就不会一次加载 800,000 个项目,但这是一次性运行的程序,根本不会在生产中使用。
谢谢!
我有一个List<>,其中包含大约 800,000 个对象。完成此列表后,我将其设置为null,然后继续执行其余的例程。
问题是 .NET 的垃圾收集器似乎没有足够快地完成它的工作,因为在将此列表设置为null后,内存使用量保持不变,并且出现“内存不足”异常。
有没有办法等待垃圾收集器完成它的工作?
也许我可以重新设计我的程序,这样我就不会一次加载 800,000 个项目,但这是一次性运行的程序,根本不会在生产中使用。
谢谢!
您可以致电:
GC.Collect();
GC.WaitForPendingFinalizers();
//I have occasionally seen an extra call to GC.Collect() here
但是,我真的只是将其作为测试,看看它是否有帮助并确定是否GC
是问题所在。
我假设您已经在Debug
和Release
模式下测试了东西。
最后一点,您可能会考虑更改GC Latency Mode。
如果绝对必要,您可以强制 GC 执行收集:
GC.Collect()
GC.Collect()
强制垃圾收集器立即运行。
我最终也使用了 List<>.Clear() 。这会迅速地破坏对象并很快释放资源。