Pergunta

Em uma aplicação VB6, eu tenho um Dictionary cujas chaves são Strings e valores são instâncias de uma classe personalizada.Se eu ligar RemoveAll() no Dictionary, primeiro liberará os objetos personalizados?Ou eu preciso explicitamente fazer isso sozinho?

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
Foi útil?

Solução

Sim, todos os objetos no Dictionary será liberado após uma ligação para RemoveAll().Do ponto de vista do desempenho (como da velocidade), eu diria que aquelas linhas que definem as variáveis ​​para Nothing são desnecessários, porque o código precisa primeiro procurá-los com base nos nomes das chaves, enquanto RemoveAll() irá enumerar e liberar tudo em um loop.

Outras dicas

RemoveAll removerá todas as associações do Dictionary:tanto as chaves quanto os valores.Seria um vazamento de referência para o Dictionary para manter uma referência aos valores no Dictionary.

Se não houver outras variáveis ​​que façam referência aos itens da coleção, esses objetos deverão ser entregues ao Coletor de Lixo para serem limpos na próxima vez que o GC for executado.

Se você, por exemplo, fizer isso onde sObj é uma variável estática em algum lugar, quando o GC for invocado em seguida pelo sistema, o primeiro objeto será limpo, mas o segundo que ainda é referenciado por sObj não.

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

d.RemoveAll()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top