Освобождает ли сначала метод RemoveAll() класса Scripting.Dictionary все свои элементы?

StackOverflow https://stackoverflow.com/questions/75011

Вопрос

В приложении VB6 у меня есть Dictionary чьи ключи Strings и значения являются экземплярами пользовательского класса.Если я позвоню RemoveAll() на Dictionary, сначала освободит пользовательские объекты?Или мне явно нужно сделать это самому?

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
Это было полезно?

Решение

Да, все объекты в Dictionary будет освобожден после звонка на RemoveAll().С точки зрения производительности (как и скорости) я бы сказал, что эти строки устанавливают переменные в Nothing не нужны, поскольку код должен сначала найти их по именам ключей, тогда как RemoveAll() перечислит и выпустит все в одном цикле.

Другие советы

RemoveAll удалит все ассоциации из Dictionary:как ключи, так и значения.Это будет справочная утечка для Dictionary сохранить ссылку на значения в Dictionary.

Если нет других переменных, ссылающихся на элементы в коллекции, эти объекты следует передать сборщику мусора для очистки при следующем запуске GC.

Если вы, например, сделаете это, когда sObj является статической переменной где-то, то при следующем вызове GC системой первый объект будет очищен, а второй, на который все еще ссылается sObj, - нет.

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

d.RemoveAll()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top