.NET Framework обеспечивает автоматическое освобождение неиспользуемой памяти посредством сбора мусора, который осуществляет низкоприоритетный поток, работающий в фоновом режиме. При возникновении дефицита памяти приоритет сборщика мусора повышается, пока он не освободит достаточно памяти.
Нельзя точно предсказать, когда сборщик мусора уничтожит объект, поэтому не помещайте в деструкторы код, который требуется исполнять в заданное время. Для максимально быстрого освобождения дефицитных ресурсов следует применять метод Dispose(), который разрешается вызывать явно.
Сборщик мусора непрерывно отслеживает дерево ссылок и освобождает память, занятую объектами, на которые никто не ссылается, а также объектами, связанными циклическими ссылками.