Принудительная сборка мусора

Есть ли способ заставить сборщик мусора в VBA/Excel 2000?

Этот вопрос относится к языку макросов в Excel. Не использовать VB .NET для манипулирования Excel. Так что GC.collect() не будет работать

3 ответа

Решение

Вы не можете воспользоваться сборкой мусора, предоставляемой.NET Framework, при использовании прямой VBA. Возможно, эта статья Эрика Липперта будет полезна

Вы не можете принудительно использовать GC в VBA, но хорошо, если для глобальных переменных задано Nothing.

В статье, упомянутой kd7, говорится, что бесполезно устанавливать нулевые локальные переменные, пока они не выйдут из области видимости, но не говорит о глобальных переменных.

В VBA глобальные переменные, определенные в модуле, остаются живыми в течение всего сеанса Excel, т.е. до тех пор, пока документ, содержащий модуль VBA, который их определяет, не будет закрыт.

Так что не ставь бесполезным Set O = Nothing когда O локально, но делайте это, когда оно глобально.

VBA/Excel не имеет сборки мусора, как старый VB. Вместо GC он использует подсчет ссылок. Память освобождается, когда вы устанавливаете указатель на ничто (или когда переменная выходит из области видимости). Как и в старом VB, это означает, что циклические ссылки никогда не освобождаются.

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