Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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

Перехват исключений | Создание специальных исключений, способ первый | Обработка нескольких исключений. | Блок finally | Время жизни объектов | Базовые сведения о времени жизни объектов | CIL-код, генерируемый для ключевого слова new | Роль корневых элементов приложения | Поколения объектов | Фоновая сборка мусора в версии .NET 4.0 |


Читайте также:
  1. C) при сортовом помоле: после ситовеечного процесса может быть до 2% манной крупы от массы перерабатываемого зерна
  2. I.Предварительное построение процесса расширения пара.
  3. II. Описание проблемных вопросов, на решение которых направлен проект нормативного правового акта
  4. II. Описание работы системы смазки.
  5. II. Правописание суффиксов прилагательных.
  6. II. Чистописание.
  7. III Организация учебного процесса

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

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

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

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

 


Дата добавления: 2015-07-25; просмотров: 64 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Public class Object| Rw.Dispose ();

mybiblioteka.su - 2015-2024 год. (0.006 сек.)