1

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

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

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

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

谢谢!

4

4 回答 4

5

您可以致电:

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

但是,我真的只是将其作为测试,看看它是否有帮助并确定是否GC是问题所在。

我假设您已经在DebugRelease模式下测试了东西。

最后一点,您可能会考虑更改GC Latency Mode

于 2013-01-29T22:21:36.853 回答
1

如果绝对必要,您可以强制 GC 执行收集:

GC.Collect()
于 2013-01-29T22:20:19.603 回答
1

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

于 2013-01-29T22:20:37.497 回答
0

我最终也使用了 List<>.Clear() 。这会迅速地破坏对象并很快释放资源。

于 2013-01-31T17:52:30.500 回答