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