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

时间:2020-03-05 18:56:39  来源:igfitidea点击:

在VB6应用程序中,我有一个"字典",其键是"字符串",值是自定义类的实例。如果我在"字典"上调用" RemoveAll()",它将首先释放自定义对象吗?还是我明确需要自己做?

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

解决方案

回答

是的,在调用RemoveAll()之后,将释放"词典"中的所有对象。从性能(从速度)的角度来看,我将不需要将变量设置为" Nothing"的那行,因为代码必须首先根据键名进行查找,而" RemoveAll()"将枚举并释放所有内容一圈。

回答

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

回答

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

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

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

d.RemoveAll()