Выполняет ли метод RemoveAll () Scripting.Dictionary сначала все свои элементы?

В приложении VB6 у меня есть Dictionary, ключи которого - String, а значения - экземпляры настраиваемого класса. Если я вызову 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
Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных...
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
Принципы ООП в JavaScript
Принципы ООП в JavaScript
Парадигма объектно-ориентированного программирования имеет 4 основных принципа,
Пройдите собеседование по Angular: Общие вопросы и ответы экспертов
Пройдите собеседование по Angular: Общие вопросы и ответы экспертов
Можете ли вы объяснить разницу между ngOnInit и конструктором в Angular?
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные...
2
0
3 778
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Да, все объекты в 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()

-1 Единственный «Сборщик мусора» в VB6 - это подсчет ссылок.

Mark Hurd 30.12.2012 11:18

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