如果我使用CreateObject()
设置一个变量,使用后是否需要将其设置为Nothing
来清理?
Dim foo
Set foo = CreateObject("SomeAssembly")
foo Bar
Set foo = Nothing
我刚刚发现Eric Lippert发布的这篇帖子:
脚本引擎会在变量超出作用域时自动清除这些变量,因此在它们超出作用域之前清除它们似乎是毫无意义的。
如果我使用CreateObject()
设置一个变量,使用后是否需要将其设置为Nothing
来清理?
Dim foo
Set foo = CreateObject("SomeAssembly")
foo Bar
Set foo = Nothing
我刚刚发现Eric Lippert发布的这篇帖子:
脚本引擎会在变量超出作用域时自动清除这些变量,因此在它们超出作用域之前清除它们似乎是毫无意义的。
我很少这样做:
Set foo = Nothing
Function DoStuff()
Dim foo : Set foo = CreateObject("lib.thing")
''# Code that uses foo
Set foo = Nothing
End Function
因为foo
即将超出作用域,所以将Nothing
分配给foo
是多余的,所以我不会这样做。
考虑:
Function DoStuff()
Dim foo : Set foo = CreateObject("lib.thing")
''# Code that uses foo
Set foo = Nothing
''# Loads more code that doesn't use foo
End Function
Nothing
是有意义的,因为否则它可能会被保留更长的时间。 然而在这种情况下,该代码可以进行重构。函数继续执行许多不需要foo
的其他操作,表明foo
使用的代码块实际上应该属于自己的函数:-Function DoStuff()
''# Code that calls FooUsage
''# Loads more code that doesn't use foo
End Function
Function FooUsage(someParams)
Dim foo : Set foo = CreateObject("lib.thing")
''# Code that uses foo
FooUsage = someResult
End Function
Nothing
是可取的,但我倾向于只在特殊情况下这样做。在正常的代码中,我发现这很少是必要的。Function
和Sub
过程。