为什么Visual Studio建议“TODO:将大字段设置为空”。

时间:2015-07-30 16:56:51

标签: vb.net visual-studio-2010 visual-studio

在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会推荐它呢?

*假设您没有对正在处理的对象进行实时引用,这很奇怪。

2 个答案:

答案 0 :(得分:5)

对于这个自动生成的代码,一般很少有人赞赏。这种一次性模式在过去10年中已经过时,优雅地被.NET 2.0中的关键终结器所取代。但是并没有完全消失,1.0天内的几个.NET类实现了它。当你从这样一个类派生出来时,你就不得不重写Dispose(Boolean)方法。遗憾的是,VB.NET编辑器不够智能,无法检测到这种情况。

对建议进行分类的最佳方法是不将其标记为正确,而是将其标记为“#34;没有错误”#34;。只要一个VB.NET程序员盲目地遵循这个建议,他就永远不会遇到麻烦。没错。

"将大字段设置为null"建议也完全属于"没有错误"类别。它通常不会有任何区别,但技术上可能是"大型物体"生活在早期的GC生成中。在创建一次性对象很久之后很久就分配了这种情况。将其设置为Nothing然后允许GC更早地释放它并且程序将更精简地运行。没错。

答案 1 :(得分:2)

有人可能会在任何时间内对被处置的对象进行引用。但是作为IDisposable类的实现者,你知道在Dispose()之后你不需要大对象。要允许尽快收集大对象,请将其设置为null。