完成后是否应该将所有对象设置为null(Nothing在 VB.NET 中)?
null
Nothing
我知道在 .NET 中,必须处理任何实现IDisposable接口的对象实例以释放一些资源,尽管对象在处理后仍然可以是某些东西(因此是isDisposed表单中的属性),所以我认为它仍然可以驻留在记忆中或至少部分?
IDisposable
isDisposed
我也知道,当一个对象超出范围时,它会被标记为收集准备好进行垃圾收集器的下一次传递(尽管这可能需要一些时间)。
因此,考虑到这一点,将设置它以null加快系统释放内存的速度,因为它不必确定它不再在范围内,它们是否有任何不良副作用?
MSDN 文章在示例中从不这样做,目前我这样做是因为我看不到危害。然而,我遇到了各种各样的意见,所以任何评论都是有用的。
Karl 是绝对正确的,没有必要在使用后将对象设置为 null。如果一个对象 implements IDisposable,只需确保IDisposable.Dispose()在完成该对象后调用(包装在try..finally或using()块中)。但即使您不记得调用Dispose(),对象上的终结器方法也应该Dispose()为您调用。
IDisposable.Dispose()
try
finally
using()
Dispose()
我认为这是一个很好的治疗方法:
深入研究 IDisposable
和这个
了解 IDisposable
尝试猜测 GC 及其管理策略没有任何意义,因为它是自我调整且不透明的。与 Jeffrey Richter 在 Dot Net Rocks 上的内部工作进行了很好的讨论:Jeffrey Richter on the Windows Memory Model和 Richters book CLR via C#第 20 章有很好的处理: