【发布时间】:2013-10-16 15:42:34
【问题描述】:
我目前正在尝试在我的一些对象上实现我的第一次处置,并且想知道遍历每个反射的所有属性并将它们设置为 null 是否是个坏主意?
【问题讨论】:
我目前正在尝试在我的一些对象上实现我的第一次处置,并且想知道遍历每个反射的所有属性并将它们设置为 null 是否是个坏主意?
【问题讨论】:
是的,这是个坏主意。
首先,您的某些属性可能是实现IDisposable 接口的类,因此您必须先对它们调用Dispose 方法。
如果你的某个属性是依赖于 COM 组件或使用某些组件的类,你必须正确处理它,否则最终会导致内存泄漏
【讨论】:
实现IDisposable 并不意味着您必须将所有字段都设置为null。当根对象无法访问它们时,GC 会处理这些问题。
并且设置null 不会做任何事情,但对象仍将在内存中,直到 GC 注意到它没有管理任何引用。
IMO 你无法看到比Proper use of the IDisposable interface 更全面的答案
设置 null 仅在只剩下一个托管引用时才有帮助,虽然您不需要它,但您需要保持封装类型处于活动状态,然后您将设置对 null 的引用。否则,如果无法访问封装类型本身,则设置 null 没有任何意义。
【讨论】: