Уничтожение объектов .NET с помощью CLR - PullRequest
2 голосов
/ 17 февраля 2011

Каким образом любой объект .NET без использования dispose () или шаблона завершения уничтожается с помощью clr?очищается ли он методом финализации объекта!

Ответы [ 4 ]

7 голосов
/ 17 февраля 2011

Нет, если объект не объявляет явный финализатор, он никогда не добавляется в свободную очередь - его память просто восстанавливается.

Это одна из причин, по которой вы не должны объявлять финализатор, если он вам действительно не нужен. Любые объекты, которые имеют финализаторы, требуют полного прохождения GC.


С Object.Finalize:

Object.Finalize ничего не делает дефолт. Это должно быть отменено производный класс только при необходимости, потому что утилизация во время мусора сбор, как правило, занимает гораздо больше времени если необходимо выполнить операцию финализации.

Также я бы порекомендовал вам проверить Сборка мусора: автоматическое управление памятью в Microsoft .NET Framework .

0 голосов
/ 14 ноября 2012

Вероятно, проще всего представить сборщик мусора в .net так, как он работает аналогично тому, как пинсеттер для боулинга очищает «мертвую древесину» (выбитые штифты):

  1. Переместите все штифты, которые не должны быть вычищены (то есть те, которые все еще стоят) с поверхности переулка.
  2. Проведите подметальной машиной по всей поверхности переулка, вычистив все, что там было.
  3. Положите булавки обратно.

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

0 голосов
/ 17 февраля 2011

См. Эту статью , чтобы получить хороший обзор того, что делает шаблон Dispose.

В некоторых случаях вам может потребоваться предоставить программистам, использующим объект, возможность явно освобождать эти внешние ресурсы до того, как сборщик мусора освободит объект. Если внешний ресурс является дефицитным или дорогим, можно добиться большей производительности, если программист явно освобождает ресурсы, когда они больше не используются.

0 голосов
/ 17 февраля 2011

Сборщик мусора в конечном итоге восстановит память, используемую объектом, после того, как он больше не будет доступен ни одной ссылке. Это единственная очистка, которая произойдет, если у объекта нет финализатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...