猿问

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

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

是否应该将所有对象设置为null (Nothing(在VB.NET中)一旦你完成了它们?

我理解在.NET中,必须处理实现IDisposable接口来释放某些资源,尽管对象在被释放后仍然可以是一些东西(因此,isDisposed属性),所以我假设它仍然可以驻留在内存中,或者至少部分驻留在内存中?

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

因此,考虑到这一点,我们将把它设置为null加快系统释放内存,因为它不需要计算出它不再在范围内,它们是否有任何坏的副作用?

MSDN文章从未在示例中这样做,目前我这样做是因为我看不到它的危害。然而,我遇到了各种各样的意见,所以任何评论都是有用的。


波斯汪
浏览 718回答 3
3回答

慕桂英546537

卡尔是绝对正确的,没有必要在使用后将对象设置为空。如果对象实现IDisposable,确保你给我打电话IDisposable.Dispose()当您完成了该对象(包装在try..finally,或者,using()街区)。但即使你不记得给我打电话Dispose(),对象上的finaliser方法应该调用Dispose()为了你。我认为这是一种很好的治疗:挖掘IDisposable而这个理解IDisposable尝试猜测GC及其管理策略没有任何意义,因为它是自调优和不透明的。关于与杰弗里·里希特(JeffreyRichter)在Dot Net Rocks上的内部工作,大家进行了很好的讨论关于Windows内存模型的JeffreyRichter里奇特的书CLR通过C#第20章有一个很好的处理方法:
随时随地看视频慕课网APP
我要回答