【发布时间】:2014-02-06 12:40:38
【问题描述】:
直觉告诉我,Dispose 旨在用于运行用户定义的代码,这些代码会释放不会自动释放的资源 - 例如文件句柄、网络句柄、数据库连接等。
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
他也说
注意,.NET 垃圾收集器是非常不可预测的,它可能会在清理所有符合收集条件的旧实例之前创建对象的一些实例。一种确定方法(无需借助内存分析器)是在终结器中放置一个断点。
i 通过上面的 GC 相关代码释放内存并收集所有未声明的对象或对象超出范围。
他还说永远不要在生产环境中使用上面的GC相关代码,但没有解释原因....所以告诉我如果有人使用下面这些GC相关代码会有什么危害GC.Collect();GC.WaitForPendingFinalizers(); GC.Collect();
无论如何都在寻找深入的知识。谢谢
【问题讨论】:
-
TL;DR:因为拥有自动管理内存的运行时的全部意义在于不必这样做。如果你试图接管你最好知道你在做什么非常好,因为几乎可以肯定你会让事情变得更糟。
-
如果您确定自己在做什么,切勿自己使用 GC。孩子们不能玩火:)
-
Dispose() 和 GC.Collect() 在很大程度上是不相关的。
-
所以我知道人们不应该使用但想知道人们何时使用 GC.Collect();和 GC.WaitForPendingFinalizers();谢谢
-
@Jon 同意。但是,在处理您希望最小化 GC 运行等的内存密集型应用程序时,这不是一个好的理念。了解某些东西的工作原理与知道不要弄乱它一样重要:D
标签: c# garbage-collection