代码之家  ›  专栏  ›  技术社区  ›  Matt Dillard

做脚本。字典的RemoveAll()方法首先释放所有元素?

  •  2
  • Matt Dillard  · 技术社区  · 17 年前

    在VB6应用程序中,我有一个 Dictionary 谁的钥匙是 String s和value是自定义类的实例。如果我打电话 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
    
    3 回复  |  直到 17 年前
        1
  •  4
  •   Neil C. Obremski    17 年前

    是的,中的所有对象 Dictionary 将在致电后发布 RemoveAll() 从性能(如速度)的角度来看,我会说那些将变量设置为 Nothing 是不必要的,因为代码必须首先根据键名查找它们,而 全部删除() 将在一个循环中枚举并释放所有内容。

        2
  •  2
  •   Mark Hurd    13 年前

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

        3
  •  0
  •   palehorse    17 年前

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

    例如,如果您在sObj是某个静态变量的情况下这样做,那么当系统下次调用GC时,第一个对象将被清理,但sObj仍引用的第二个对象将不会被清理。

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