小编典典

在.NET中使用后将对象设置为Null / Nothing

c#

完成所有对象后,是否应该将所有对象都设置为nullNothing在VB.NET中)?

我知道,在.NET中,处置实现IDisposable接口以释放一些资源的对象的任何实例都是至关重要的,尽管对象在处置后仍可以是某种东西(因此具有isDisposed表格中的属性),因此我认为它仍然可以驻留在内存中还是至少有一部分?

我也知道,当一个对象超出范围时,它会被标记为可以为下一次垃圾收集器的传递做好准备(尽管这可能需要一些时间)。

因此,考虑到这一点,将可以对其进行设置以null加快系统释放内存的速度,因为不必确定它已不在范围之内,并且它们是否有不良的副作用?

MSDN文章从不在示例中执行此操作,目前我这样做是因为我看不到危害。但是,我遇到了多种意见,因此任何评论都是有用的。


阅读 662

收藏
2020-05-19

共1个答案

小编典典

Karl绝对正确,使用后无需将对象设置为null。如果实现了一个对象IDisposable,只需确保IDisposable.Dispose()在处理完该对象(包装在try..
finallyusing()块中)后调用即可。但是,即使您不记得要调用Dispose(),对象上的finaliser方法也应该在Dispose()为您调用。

我认为这是一种很好的治疗方法:

挖掘IDisposable

和这个

了解IDisposable

尝试重新猜测GC及其管理策略没有任何意义,因为它是自调整的且不透明。在此处,关于Dot Net Rocks上的Jeffrey
Richter的内部工作方式进行了很好的讨论:Windows Memory
Model
和Richters的Crey via
C#
第20章中的Jeffrey Richter有很好的论述:

2020-05-19