Сборка "мусора" работает путем отслеживания корневых каталогов приложения. Корневые каталоги приложения являются местами хранения, которые содержат ссылки на объекты на управляемой "куче" (или на пустой указатель). В.NET корни
, список активных корней ведется CLR. Сборщик "мусора" работает путем рассмотрения объектов на управляемой "куче" и наблюдения, которые все еще доступны приложением, то есть, доступны через корневой каталог приложения. Такой объект считается внедренным.
Теперь предполагают, что у Вас есть родительская форма, которая содержит ссылки на дочерние формы, и эти дочерние формы содержат ссылки на родительскую форму. Далее, предположите, что приложение больше не содержит ссылки на родителя для или любую из дочерних форм. Затем в целях сборщика "мусора" эти управляемые объекты больше не базируются и будут собраны "мусор" в следующий раз, когда сборка "мусора" происходит.
Нет лучше. Таймер используется, чтобы периодически «подталкивать» ваш поток к каким-либо действиям. WaitForSingleObject ждет дескрипторов. Тайм-аут есть, поэтому вы можете использовать его, чтобы решить прекратить ожидание, вместо того, чтобы застрять в тупике. Использование таймера для выхода объекта waitforsingle из блокировки не требуется, если вы используете тайм-аут.
Затраты ресурсов незначительны для обоих. Я не могу сказать, какой подход вам следует использовать, потому что он сильно зависит от вашей ситуации с кодом.