在 Visual Studio(至少 2010)中编写 VB.NET 时,如果您创建一个实现 IDisposable
的类,IDE 将为您生成此框架:
' IDisposable
Protected Overridable Sub Dispose(disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' TODO: dispose managed state (managed objects).
End If
' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below.
' TODO: set large fields to null.
End If
Me.disposedValue = True
End Sub
如果我正确理解垃圾收集,将字段设置为 null 没有任何作用。*但是为什么 Visual Studio 会推荐它呢?
*假设您没有保存对正在处置的对象的实时引用,这会很奇怪。
最佳答案
一般来说,这个自动生成的代码没有什么值得钦佩的地方。一次性模式在过去 10 年里已经过时,被 .NET 2.0 中的关键终结器优雅地取代。但并没有完全消失,1.0 时代的几个 .NET 类都实现了它。当您从这样的类派生时,您将不得不重写 Dispose(Boolean)
方法。遗憾的是,VB.NET 编辑器不够智能,无法检测到这种极端情况。
对建议进行分类的最佳方法是不要将其标记为正确,而是标记为“没有错误”。只要 VB.NET 程序员盲目遵循建议,他们就永远不会遇到麻烦。这没有什么问题。
“将大字段设置为空”建议也完全属于“没有错误”的类别。它通常不会产生任何影响,但从技术上讲,“大对象”可能存在于较早的 GC 代中。当它被分配得很晚,在一次性对象创建很久之后,这种情况就很可能发生。将其设置为 Nothing
然后允许 GC 更早地释放它,并且程序将运行得更精简。这没有什么问题。
关于vb.net - 为什么 Visual Studio 建议 "TODO: set large fields to null."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31729785/