Scripting.Dictionary 的RemoveAll() 方法是否首先释放其所有元素?
-
09-06-2019 - |
题
在 VB6 应用程序中,我有一个 Dictionary
谁的钥匙是 String
s 和 value 是自定义类的实例。如果我打电话 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
解决方案
是的,所有对象都在 Dictionary
将在调用后释放 RemoveAll()
. 。从性能(如速度)的角度来看,我想说这些行将变量设置为 Nothing
是不必要的,因为代码必须首先根据键名称查找它们,而 RemoveAll()
将在一个循环中枚举并释放所有内容。
其他提示
RemoveAll
将从中删除所有关联 Dictionary
:键和值。这将是一个参考泄漏 Dictionary
保留对值的引用 Dictionary
.
如果没有其他变量引用集合中的项目,则应将这些对象交给垃圾收集器,以便在下次运行 GC 时进行清理。
例如,如果您在 sObj 是某处的静态变量的情况下执行此操作,那么当系统下次调用 GC 时,第一个对象将被清除,但仍被 sObj 引用的第二个对象将不会被清除。
d("a") = New clsCustom
d("b") = New clsCustom code.
sObj = d("b")
d.RemoveAll()
不隶属于 StackOverflow