Hat Scripting.Dictionary der RemoveAll () Methode Release alle Elemente zuerst?
-
09-06-2019 - |
Frage
In einer VB6-Anwendung habe ich eine Dictionary
, dessen Schlüssel String
s und Werte sind Instanzen einer benutzerdefinierten Klasse. Wenn ich RemoveAll()
auf dem Dictionary
nennen, wird es zunächst um die benutzerdefinierten Objekte befreien? Oder brauche ich ausdrücklich diese selbst zu tun?
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
Lösung
Ja, alle Objekte in der Dictionary
werden nach einem Aufruf freigegeben werden, um RemoveAll()
. Aus Performance (wie in der Geschwindigkeit) Standpunkt würde ich sagen, diese Zeilen die Variablen Nothing
Einstellung nicht notwendig sind, da der Code sie hat nachschlagen erste basiert auf den Schlüsselnamen während RemoveAll()
wird aufzuzählen und lassen Sie alles in einer Schleife.
Andere Tipps
RemoveAll
werden alle Verbände der Dictionary
entfernen: sowohl die Schlüssel und Werte.
Es wäre ein Referenzleck sein für den Dictionary
auf die Werte in der Dictionary
einen Verweis zu halten.
Wenn es keine anderen Variablen, die die Elemente in der Sammlung verweisen dann sollten diese Objekte an den Garbage Collector übergeben werden, um die nächste Zeit bereinigt werden die GC ausgeführt wird.
Wenn Sie zum Beispiel tun dies, wo SOBJ ist eine statische Variable irgendwo dann, wenn der GC durch das System als nächstes aufgerufen wird, wird das erste Objekt gereinigt werden, aber die zweiten, die noch von SOBJ verwiesen wird nicht.
d("a") = New clsCustom
d("b") = New clsCustom code.
sObj = d("b")
d.RemoveAll()