在实现Dispose()
方法时,是否有必要将大对象设置为null
?
在实现Dispose()
方法时,是否有必要将大对象设置为null
?
using(DisposableClass dc = new DisposableClass())
{
dc.PerformActionOnUmanagedResources();
dc.PerformAnotherActionOnUmanagedResources();
}
通常情况下不会。
垃圾回收器会寻找根对象,如果两个对象都没有被引用,则循环依赖关系不会阻止回收。
但是有一个例外:如果对象A引用了对象B,并且对象B正在被处理,您可能需要清理该关系,否则可能会导致泄漏。这种情况最常见于事件处理程序(从A到B的引用是B控制的,因为它订阅了A上的事件)。在这种情况下,如果A仍然被引用,即使B已经被处理,它也无法被回收。
Dispose 方法的目的是通过调用基类的 dispose 方法来释放与您的类和父类相关联的所有资源。请阅读此链接,它应该会使事情更加清晰:
“大对象”指的是什么?
无论如何,你都应该在任何实现IDisposable接口的成员上调用Dispose()方法。
正如其他人指出的那样,这并不是必需的,但这是一个好的实践方法,有助于调试。
一旦对象完成了它正在使用的指针,将其设置为 null 可以帮助防止稍后重用该对象(您将收到 null 引用异常)。
相同的逻辑适用于在 C++ 析构函数中将成员指针设置为 null,一旦您删除了它们。这不是必须的,但它可以帮助以后进行故障排除。