Domanda

In un'applicazione VB6, ho un file Dictionary di chi sono le chiavi Stringe i valori sono istanze di una classe personalizzata.Se chiamo RemoveAll() sul Dictionary, libererà prima gli oggetti personalizzati?Oppure devo esplicitamente farlo da solo?

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
È stato utile?

Soluzione

Sì, tutti gli oggetti nel file Dictionary verrà rilasciato dopo una chiamata a RemoveAll().Dal punto di vista delle prestazioni (come della velocità), direi che quelle linee impostano le variabili Nothing non sono necessari, perché il codice deve prima cercarli in base ai nomi delle chiavi mentre RemoveAll() enumererà e rilascerà tutto in un unico ciclo.

Altri suggerimenti

RemoveAll rimuoverà tutte le associazioni dal file Dictionary:sia le chiavi che i valori.Sarebbe una fuga di riferimento per il Dictionary per mantenere un riferimento ai valori nel file Dictionary.

Se non sono presenti altre variabili che fanno riferimento agli elementi nella raccolta, tali oggetti devono essere consegnati al Garbage Collector per essere ripuliti alla successiva esecuzione del GC.

Se, ad esempio, lo fai dove sObj è una variabile statica da qualche parte, quando il GC viene richiamato successivamente dal sistema, il primo oggetto verrà ripulito ma il secondo a cui fa ancora riferimento sObj no.

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

d.RemoveAll()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top