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