В чем разница между финализацией и удалением в .net?

Возможный дубликат:
Завершить vs Dispose

Привет,

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

Просьба поделиться...

Спасибо заранее.

Ответы

Ответ 1

Финализаторы запускаются сборкой мусора до того, как объект имеющий право на сбор, будет исправлен. Dispose() предназначен для очистки неуправляемых ресурсов, таких как сетевые соединения, файлы, дескрипторы для ОС и т.д. Он лучше всего работает в сочетании с блоком using, где компилятор убеждается, что Dispose() будет вызван сразу после завершения с объектом, а также гарантирует, что вы не сможете работать с объектом больше, чем только его разместили.

Обратите внимание, что финализаторы не должны запускаться, поэтому полагаться на это может быть опасно:

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

Осторожно также с точным временем, когда объект становится пригодным для сбора. Прочитайте статью, связанную выше - это ни область (странное слово, которое связано с временем жизни объекта - это область текста программы, в которой она имеет право ссылаться на [именованный объект] по его неквалифицированному имени.) и не является строго ссылкой на подсчет, поскольку объект может стать пригодным для сбора даже до того, как последняя ссылка на него исчезнет.

Ответ 2

  • Завершить: undeterministic недетерминированный деструктор/финализатор, который автоматически вызывается сборщиком мусора, когда больше нет ссылок на этот экземпляр.
  • Dispose: детерминистически вызывается разработчиком для объекта, реализующего IDisposable для освобождения ресурсов.