Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何等待内存被释放?_C#_Memory Management_Out Of Memory - Fatal编程技术网

C# 如何等待内存被释放?

C# 如何等待内存被释放?,c#,memory-management,out-of-memory,C#,Memory Management,Out Of Memory,我有一个列表,里面有大约800000个对象。完成此列表后,我将其设置为null,然后继续执行其余的例程 问题是.NET的垃圾收集器似乎没有足够快地完成它的工作,因为在将此列表设置为null后,内存使用保持不变,并且出现“内存不足”异常 有没有办法等待垃圾收集器完成它的工作 也许我可以重新设计我的程序,这样我就不会一次加载800000个项目,但这是一个一次性运行的程序,根本不会在生产中使用 谢谢 如果绝对必要,您可以强制GC执行以下收集: GC.Collect() 如果绝对必要,您可以强制GC使

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

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

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

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


谢谢

如果绝对必要,您可以强制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调试扩展()来进一步查看程序的内存使用情况,因为在调试模式下完成列表后到达确切的点是非常漫长的…在发布模式下测试,因为在调试模式下完成列表后到达确切的点是非常漫长的。。。