Pregunta

En una aplicación VB6, tengo un Dictionary cuyas llaves son Strings y valores son instancias de una clase personalizada.si llamo RemoveAll() sobre el Dictionary, ¿liberará primero los objetos personalizados?¿O necesito hacerlo explícitamente yo mismo?

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
¿Fue útil?

Solución

Sí, todos los objetos en el Dictionary será liberado después de una llamada a RemoveAll().Desde el punto de vista del rendimiento (como de la velocidad), diría que esas líneas que establecen las variables en Nothing son innecesarios, porque el código primero debe buscarlos en función de los nombres de las claves, mientras que RemoveAll() enumerará y publicará todo en un solo bucle.

Otros consejos

RemoveAll eliminará todas las asociaciones del Dictionary:tanto las claves como los valores.Sería una fuga de referencia para el Dictionary mantener una referencia a los valores en el Dictionary.

Si no hay otras variables que hagan referencia a los elementos de la colección, esos objetos deben entregarse al recolector de basura para que los limpie la próxima vez que se ejecute el GC.

Si, por ejemplo, hace esto donde sObj es una variable estática en algún lugar, cuando el sistema invoque el GC a continuación, el primer objeto se limpiará, pero el segundo al que todavía hace referencia sObj no.

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

d.RemoveAll()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top