VBA Сборщик мусора Подробнее - PullRequest
17 голосов
/ 05 ноября 2010

Недавно я обнаружил, что мне нужно написать какой-нибудь код VBA, и просто подумал, а сталкивался ли кто-нибудь с какими-либо подробностями о том, как работает сборщик мусора VBA?.Net GC действительно очень хорошо документированы, но я не могу найти ни малейшей детализации в VBA GC, кроме этого смутного упоминания о том, что это счетчик ссылок.Я предполагаю, что он довольно похож на VB6 GC, но также не могу найти никакой информации об этом.

В частности, мне было бы интересно узнать:

  • Что вызывает GC
  • Какой алгоритм он использует (например, генерирует коллекцию?)
  • Как (если вообще) обрабатывает циклические ссылки?
  • Есть ли способ контроляоперация

Это больше из любопытства, чем какая-либо конкретная потребность знать, любая оценка очень ценится!

1 Ответ

15 голосов
/ 05 ноября 2010

Далее предполагается, что VBA по-прежнему , используя тот же механизм сбора мусора, который использовался в VB6 (что вполне вероятно).

VB6 использовал GC для подсчета ссылок.GC запускается детерминистически, когда последняя ссылка на данный объект установлена ​​на Nothing.Установка локальных ссылок на Nothing не требуется, это происходит, когда они выходят за пределы области действия.

Каждый объект реализует интерфейс COM, который заботится о количестве ссылок для этого объекта.Каждое присвоение ссылки на объект обновляет счетчики ссылок вовлеченных ссылок (то есть счетчик старого объекта, на который ранее ссылались, уменьшается, а счетчик нового объекта увеличивается).Объект подвергается сборке мусора, когда его счетчик ссылок достигает 0.

Объекты в циклических ссылках, таким образом, никогда не собираются во время жизни приложения VBA.Более того, VBA не предлагает способ разрыва циклических ссылок.В VB6 слабые ссылки могут быть реализованы через функции WinAPI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...