Frage

In einer VB6-Anwendung habe ich eine Dictionary, dessen Schlüssel Strings 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
War es hilfreich?

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()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top