Детали процесса финализации

Детали процесса финализации

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

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

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

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Детали: Ускоряем JavaScript

Из книги Журнал «Компьютерра» № 20 от 30 мая 2006 года автора Журнал «Компьютерра»

Детали: Ускоряем JavaScript Автор: Хендерсон, КэлКажется, всего несколько дней назад мы рассказывали вам об истории Flickr, и вот — статья, написанная главным разработчиком этой компании Кэлом Хендерсоном. Статья довольно специфичная — это вполне конкретные советы по решению


Опишите детали

Из книги Добавьте в корзину. Ключевые принципы повышения конверсии веб-сайтов автора Айзенберг Джеффри

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


19.4.5. Прочие детали

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл


2.5. Управление режимом отображения детали

Из книги КОМПАС-3D для студентов и школьников. Черчение, информатика, геометрия автора Большаков Владимир

2.5. Управление режимом отображения детали При работе в КОМПАС-3D LT доступно несколько типов отображения модели: каркас, отображение без невидимых линий или с тонкими невидимыми линиями и полутоновое отображение. Чтобы выбрать тип отображения, вызовите команду Вид |


3.1. Формирование основания модели детали

Из книги Инфобизнес на полную мощность [Удвоение продаж] автора Парабеллум Андрей Алексеевич

3.1. Формирование основания модели детали В общем случае порядок создания модели включает формирование основания, приклеивание и вырезание дополнительных элементов, построение массивов элементов и зеркальное копирование, создание дополнительных конструктивных


3.2. Добавление и удаление материала детали

Из книги Язык Си - руководство для начинающих автора Прата Стивен

3.2. Добавление и удаление материала детали Добавление материала детали — это создание в ней новых тел, а также приклеивание к имеющемуся телу (телам) новых элементов. Тело детали — это область, ограниченная гранями детали. Считается, что эта область заполнена однородным


3.5.1. Определение и задание свойств детали

Из книги iOS. Приемы программирования автора Нахавандипур Вандад

3.5.1. Определение и задание свойств детали Щелкните правой кнопкой мыши в любом пустом месте окна модели. Из контекстного меню вызовите команду Свойства (рис. 3.10). На Панели свойств в поле Обозначение введите обозначение (например, ПМИГ ХХХХ10) и наименование детали (Опора)


4.1. Изображение плоской детали. Нанесение размеров

Из книги C++ для начинающих автора Липпман Стенли

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


4.2. Создание трехмерной модели и построение горизонтальной проекции детали

Из книги Linux Mint и его Cinnamon. Очерки применителя автора Федорчук Алексей Викторович

4.2. Создание трехмерной модели и построение горизонтальной проекции детали Правила изображения предметов устанавливает ГОСТ 2.305-68. Изображения предметов должны выполняться по методу прямоугольного проецирования.При этом предмет предполагается расположенным между


4.8. Изображение плоской детали с элементами скруглений

Из книги автора

4.8. Изображение плоской детали с элементами скруглений Система КОМПАС-3В LT предоставляет пользователю мощные средства для выполнения геометрических построений.Вспомогательная прямая может быть построена девятью способами, отрезок и окружность — шестью. При


7.1. Использование детали-заготовки для имитации создания сборки

Из книги автора

7.1. Использование детали-заготовки для имитации создания сборки Рассмотрим пример моделирования крепления оптической детали в оправе резьбовым кольцом по исходным данным рис. 6.10. На первом этапе необходимо построить модели трех деталей.При создании моделей следует


1.27. Представление видов «Основной — детали» с помощью UISplitViewController

Из книги автора

1.27. Представление видов «Основной — детали» с помощью UISplitViewController Постановка задачи Необходимо максимально эффективно использовать большой экран iPad, представив на нем два расположенных рядом контроллера