Scripting.Dictionary的RemoveAll()方法是否首先释放所有元素?

时间:2008-09-16 17:49:06

标签: vb6 memory-management dictionary

在VB6应用程序中,我有一个Dictionary,其键为String,值为自定义类的实例。如果我在RemoveAll()上拨打Dictionary,它会先释放自定义对象吗?或者我自己明确需要这样做吗?

Dim d as Scripting.Dictionary

d("a") = New clsCustom
d("b") = New clsCustom

' Are these two lines necessary?
Set d("a") = Nothing
Set d("b") = Nothing

d.RemoveAll

3 个答案:

答案 0 :(得分:4)

是的,调用Dictionary后,RemoveAll()中的所有对象都会被释放。从性能(如速度)的角度来看,我会说那些将变量设置为Nothing的行是不必要的,因为代码必须首先根据键名查找它们,而RemoveAll()将枚举和释放一切都在一个循环中。

答案 1 :(得分:2)

RemoveAll将删除Dictionary中的所有关联:键和值。 Dictionary保留对Dictionary中值的引用将是参考泄漏。

答案 2 :(得分:0)

如果没有其他变量引用集合中的项目,则应该将这些对象传递给垃圾收集器,以便在下次运行GC时进行清理。

例如,如果您执行此操作,其中sObj是某个地方的静态变量,那么当系统接下来调用GC时,第一个对象将被清除,但仍然被sObj引用的第二个对象将不会。

d("a") = New clsCustom
d("b") = New clsCustom code.
sObj = d("b")

d.RemoveAll()