将变量设置为“Nothing”是一个好习惯吗?

时间:2011-01-27 19:35:24

标签: vb.net memory nothing

如果我有

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

必要还是罚款以便以后执行此操作:

myRect = Nothing

或者没有必要?谢谢。

IF 这是必要的,还有其他情况不适合我的变量吗?

2 个答案:

答案 0 :(得分:7)

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

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


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

作为一个简单的例子,假设你有一个包装T[]数组的容器类,你给这个容器一个Empty方法。在此方法中将容器的内部数组设置为null可能是有意义的,这将导致对数组对象的零引用,使其符合垃圾回收的条件。 (然后,当外部代码尝试向集合中添加T时,您将创建一个新数组。)如果您未在Empty上将字段设置为null,那么仍然会引用数组(即字段),这样就可以使用你真正不需要的少量内存。

就像我说的那样,这是一个简单的例子。老实说,你很少需要考虑这样的场景。我只是觉得我会提到它,这样你就不会觉得将字段设置为Nothing从来没有完成任何事情。

*我实际上并没有引用任何具体的人;这只是我听过不止一次的过度概括。

答案 1 :(得分:5)

不要这样做。这在vb6天很重要,但对于.Net,它可能(尽管非常不可能)实际上关闭垃圾收集器并产生其他意想不到的副作用。