gpt4 book ai didi

vb.net - 为什么 Visual Studio 建议 "TODO: set large fields to null."?

转载 作者:行者123 更新时间:2023-12-02 11:30:39 24 4
gpt4 key购买 nike

在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com