在 VB6 应用程序中,我有一个 Dictionary 谁的钥匙是 Strings 和 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()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top