2010-07-01 3 views
2

написано в ссылке http://msdn.microsoft.com/en-us/magazine/bb985010.aspx.NET сборщик мусора

«Когда приложение создает новый объект, новый оператор выделяет память из кучи. Если тип объекта содержит метод Finalize, затем указатель на объект помещается в очередь завершения ».

Может кто-то пожалуйста, разъяснить мне

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

2) Каждый класс .NET, неявно использующий finalize (используя деструктор), поэтому весь объект библиотеки класса .net пойдет для завершения очереди.

3) насчет нашего пользовательского класса, как classs A { } класса А OBJ будет идти, чтобы завершить или нет, cosidering оба случая (явное/неявное деструктор)

4) Если выше класс написано в неуправляемом коде, что будет happen.It будет идти, чтобы завершить очередь или не

Благодарности

ответ

3

1) Да, объекты, реализующие Finalize() - метод («деструктор» в C#) добавляются финализации -очередь.

2) Нет, большинство классов .NET не имеют Finalizer. Если вы не реализуете один в своем классе, экземпляры этого класса не будут добавлены в очередь финализации.

3) Вы, класс A, переходите только к завершающей очереди, когда он реализует как Finalize-Method. («Деструктор» в C#

4) Неуправляемый класс не управляется. Это не будет собирать мусор и не добавляться в очередь финализации.

Некоторые общие замечания.

  • «Деструктор» в C# не является деструктором в смысле C++. У вас нет грантополучателей, когда он будет вызываться и т. Д. Его синтаксический сахар для написания метода финализатора.
  • Избегайте финализаторов, поскольку они добавляют дополнительные накладные расходы. Сначала объект должен быть добавлен в очередь завершения. Затем его нужно собрать в мусор дважды. Впервые обнаружить, что он больше не используется. Второй раз, когда завершился финализатор.
  • Используйте интерфейс IDisposable для управления и освобождения ресурсов. Особенно местные ресурсы.
  • Используйте только финализатор, для «аварийной очистки» собственных ресурсов. В основном вы проверяете правильность расположения объекта (IDisposable) -interace. Если нет, вы выполняете работу в финализаторе, чтобы предотвратить дальнейшие утечки ресурсов.
+0

+1, Некоторые очень важные моменты! – CharithJ

Смежные вопросы