vb.net - 将变量设置为 "Nothing"是一个好习惯吗?

标签 vb.net memory nothing

如果我得到

Dim myRect As Rectangle = New Rectangle(0,0,100,100)

以后这样做是否有必要或很好:
myRect = Nothing

还是没有必要?谢谢你。

如果 是必要的,是否还有其他情况不适用于我的变量?

最佳答案

一般来说,作为 Joel said ,这是不必要的。

但是,在您的具体示例中,它实际上是 毫无意义的 Rectangle 是一种值类型,因此将其设置为 Nothing 甚至不会影响对象的引用计数;它正在为您的 Rectangle 变量分配一个新值( myRect 的默认值)。这类似于拥有一个 Integer 变量并在方法结束时将其设置为 0。什么都不给你买。

我应该指出,“将任何变量设置为 Nothing [或 C# 中的 null] 永远不会完成任何事情”* 的说法是一个神话。如果不再需要引用的对象但您仍然拥有对类实例本身的引用,则您完全有可能在类中有一个字段,您也可以将其设置为 null

作为一个简单的例子,假设您有一些包装 T[] 数组的容器类,并且您为该容器提供了一个 Empty 方法。在此方法中将容器的内部数组设置为 null 可能是有意义的,这将导致对数组对象的零引用,使其有资格进行垃圾回收。 (然后,当外部代码接下来尝试向集合添加 o​​jit_code 时,您将创建一个新数组。)如果您没有在 T 上将该字段设置为 null,那么仍然会有对该数组(即该字段)的引用,因此这将是您真正不需要的少量内存被使用。

就像我说的,这是一个简单的例子。老实说,您很少需要考虑这样的场景。我只是想我会提到它,这样您就不会产生错误的印象,即将字段设置为 Empty 实际上永远不会完成任何事情。

*我实际上并没有在这里引用任何特定的人;这只是我不止一次听到的一种过度概括。

关于vb.net - 将变量设置为 "Nothing"是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4820952/

相关文章:

vb.net - 如何在VB.net中将[']解码为'?

mysql - 搜索数据网格查看确切的关键字

vb.net - 如何检查枚举类型

c++ - valgrind 如何以及何时检测内存泄漏

c# - 如何以编程方式训练 SpeechRecognitionEngine 并将音频文件转换为 C# 或 vb.net 中的文本

c++ - 将大文件加载到内存中并在程序的所有运行时间中保留它是否错误?

c++ - 内存泄漏,窗口是否有防止达到最大内存的保护措施?

vba - 为什么 "If Value is Nothing"抛出 "Object Required (Error 424)"

VB.Net Linq 到实体空值比较 - 'Is Nothing' 或 '= Nothing' ?

.net - VB.NET 结构和什么都没有 - 问题