Ответ 1
Финализаторы запускаются сборкой мусора до того, как объект имеющий право на сбор, будет исправлен. Dispose()
предназначен для очистки неуправляемых ресурсов, таких как сетевые соединения, файлы, дескрипторы для ОС и т.д. Он лучше всего работает в сочетании с блоком using
, где компилятор убеждается, что Dispose()
будет вызван сразу после завершения с объектом, а также гарантирует, что вы не сможете работать с объектом больше, чем только его разместили.
Обратите внимание, что финализаторы не должны запускаться, поэтому полагаться на это может быть опасно:
Что это значит для вас: Ваши программы не могут полагаться на финализаторы, сохраняя порядок вещей. Финализаторы являются защитной сетью, а не основным средством для рекультивации ресурсов. Когда вы закончите работу с ресурсом, вам необходимо освободить его, вызвав
Close
илиDisconnect
или любой метод очистки доступен для объекта. (ИнтерфейсIDisposable
кодирует это соглашение.)
Осторожно также с точным временем, когда объект становится пригодным для сбора. Прочитайте статью, связанную выше - это ни область (странное слово, которое связано с временем жизни объекта - это область текста программы, в которой она имеет право ссылаться на [именованный объект] по его неквалифицированному имени.) и не является строго ссылкой на подсчет, поскольку объект может стать пригодным для сбора даже до того, как последняя ссылка на него исчезнет.