IIR C, типы значений все еще очищены.
С ссылочными типами все сложнее. Ссылки выходят за рамки, но G C отвечает за очистку самих экземпляров - в конце концов. Видите, запуск G C стоит дорого. В то время как он собирает и завершает, все остальные потоки в этом приложении должны сделать паузу.
В результате G C ленив в работе. Если он запускается только один раз - при закрытии приложения - это идеальный случай. Помимо этого, только специальная стратегия G C, явные вызовы G C .Collect () (которых у вас не должно быть в рабочем коде) или опасность исключения OutOfMemory запустят его.
Когда он запускается, все, что имеет значение для каждого экземпляра, это «у меня есть непрерывная цепочка ссылок на приложение root?» Как долго go он выходил из области действия, не имеет значения (за исключением Optimsations, таких как системы генерации).
Обратите внимание, что иногда вам приходится выполнять некоторую работу по очистке, когда неуправляемый ресурс выходит за пределы области действия / права сейчас же. Это то, что обрабатывают финализаторы, iDisposeable и использующие блоки.