小编典典

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

all

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

我知道在 .NET
中,必须处理任何实现IDisposable接口的对象实例以释放一些资源,尽管对象在处理后仍然可以是某些东西(因此是isDisposed表单中的属性),所以我认为它仍然可以驻留在记忆中或至少部分?

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

因此,考虑到这一点,将设置它以null加快系统释放内存的速度,因为它不必确定它不再在范围内,它们是否有任何不良副作用?

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


阅读 77

收藏
2022-07-16

共1个答案

小编典典

Karl 是绝对正确的,没有必要在使用后将对象设置为 null。如果一个对象 implements
IDisposable,只需确保IDisposable.Dispose()在完成该对象后调用(包装在try..finallyusing()块中)。但即使您不记得调用Dispose(),对象上的终结器方法也应该Dispose()为您调用。

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

深入研究
IDisposable

和这个

了解
IDisposable

尝试猜测 GC 及其管理策略没有任何意义,因为它是自我调整且不透明的。与 Jeffrey Richter 在 Dot Net Rocks
上的内部工作进行了很好的讨论:Jeffrey Richter on the Windows Memory
Model
和 Richters book
CLR via C#第 20 章有很好的处理:

2022-07-16