C# 如何等待内存被释放?
我有一个列表,里面有大约800000个对象。完成此列表后,我将其设置为null,然后继续执行其余的例程 问题是.NET的垃圾收集器似乎没有足够快地完成它的工作,因为在将此列表设置为null后,内存使用保持不变,并且出现“内存不足”异常 有没有办法等待垃圾收集器完成它的工作 也许我可以重新设计我的程序,这样我就不会一次加载800000个项目,但这是一个一次性运行的程序,根本不会在生产中使用C# 如何等待内存被释放?,c#,memory-management,out-of-memory,C#,Memory Management,Out Of Memory,我有一个列表,里面有大约800000个对象。完成此列表后,我将其设置为null,然后继续执行其余的例程 问题是.NET的垃圾收集器似乎没有足够快地完成它的工作,因为在将此列表设置为null后,内存使用保持不变,并且出现“内存不足”异常 有没有办法等待垃圾收集器完成它的工作 也许我可以重新设计我的程序,这样我就不会一次加载800000个项目,但这是一个一次性运行的程序,根本不会在生产中使用 谢谢 如果绝对必要,您可以强制GC执行以下收集: GC.Collect() 如果绝对必要,您可以强制GC使
谢谢 如果绝对必要,您可以强制GC执行以下收集:
GC.Collect()
如果绝对必要,您可以强制GC使用以下命令执行收集:
GC.Collect()
强制垃圾收集器立即运行。强制垃圾收集器立即运行。您可以调用:
GC.Collect();
GC.WaitForPendingFinalizers();
//I have occasionally seen an extra call to GC.Collect() here
然而,我只想做一个测试,看看它是否有帮助,并确定GC
是否是问题所在
我假设您已经在Debug
和Release
两种模式下进行了测试
最后一点,您可以考虑更改。您可以调用:
GC.Collect();
GC.WaitForPendingFinalizers();
//I have occasionally seen an extra call to GC.Collect() here
然而,我只想做一个测试,看看它是否有帮助,并确定GC
是否是问题所在
我假设您已经在Debug
和Release
两种模式下进行了测试
最后一点,您可以考虑更改。最后,我还使用了List.Clear()。这会在热节拍中摧毁对象并快速释放资源。我最后也使用了List.Clear()。这会在热节拍中击碎物体,并快速释放资源。下面Daniel的回答应该是解决问题的一个良好开端。但是,您也可以通过使用SOS调试扩展()进一步了解程序的内存使用情况下面Daniel的回答应该是解决问题的良好开端。但您也可以通过使用在发布模式下测试的SOS调试扩展()来进一步查看程序的内存使用情况,因为在调试模式下完成列表后到达确切的点是非常漫长的…在发布模式下测试,因为在调试模式下完成列表后到达确切的点是非常漫长的。。。