【问题标题】:To dispose an object should I set all properties to null? [duplicate]要处置一个对象,我应该将所有属性设置为空吗? [复制]
【发布时间】:2013-10-16 15:42:34
【问题描述】:

我目前正在尝试在我的一些对象上实现我的第一次处置,并且想知道遍历每个反射的所有属性并将它们设置为 null 是否是个坏主意?

【问题讨论】:

    标签: c# dispose


    【解决方案1】:

    是的,这是个坏主意。

    首先,您的某些属性可能是实现IDisposable 接口的类,因此您必须先对它们调用Dispose 方法。

    如果你的某个属性是依赖于 COM 组件或使用某些组件的类,你必须正确处理它,否则最终会导致内存泄漏

    【讨论】:

      【解决方案2】:

      实现IDisposable 并不意味着您必须将所有字段都设置为null。当根对象无法访问它们时,GC 会处理这些问题。

      并且设置null 不会做任何事情,但对象仍将在内存中,直到 GC 注意到它没有管理任何引用。

      IMO 你无法看到比Proper use of the IDisposable interface 更全面的答案

      设置 null 仅在只剩下一个托管引用时才有帮助,虽然您不需要它,但您需要保持封装类型处于活动状态,然后您将设置对 null 的引用。否则,如果无法访问封装类型本身,则设置 null 没有任何意义。

      【讨论】:

        猜你喜欢
        • 2019-05-15
        • 2015-10-22
        • 2011-08-29
        • 1970-01-01
        • 2019-04-23
        • 1970-01-01
        • 2012-09-01
        • 1970-01-01
        相关资源
        最近更新 更多