2008-09-16 33 views
2

在VB6應用程序中,我有一個Dictionary,其關鍵是String s,值是自定義類的實例。如果我在Dictionary上撥打RemoveAll(),它是否會首先釋放自定義對象?還是我明確需要自己做這個?Scripting.Dictionary的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 

回答

4

是的,在Dictionary所有對象將是RemoveAll()呼叫後釋放。從性能(如速度)的角度來看,我會說這些行將變量設置爲Nothing是不必要的,因爲代碼必須先根據鍵名查找它們,而RemoveAll()將在一個循環中枚舉並釋放所有內容。

2

RemoveAll將刪除Dictionary中的所有關聯:鍵和值。 這將是Dictionary的參考泄漏,以保留對Dictionary中的值的引用。

0

如果沒有其他變量引用集合中的項目,那麼這些對象應該交給垃圾收集器,以便在下次GC運行時進行清理。

例如,如果你這樣做,其中sObj是某個地方的靜態變量,那麼當系統接下來調用GC時,第一個對象將被清理,但仍然被sObj引用的第二個對象不會。

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

d.RemoveAll() 
+1

-1 _VB6_中唯一的「垃圾收集器」是引用計數。 – 2012-12-30 07:18:26

相關問題