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

Создание финализируемых и высвобождаемых типов

Базовые сведения о времени жизни объектов | CIL-код, генерируемый для ключевого слова new | Роль корневых элементов приложения | Поколения объектов | Фоновая сборка мусора в версии .NET 4.0 | Public class Object | Описание процесса финализации | Rw.Dispose (); | Взаимодействие со сборщиком мусора | GC.WaitForPendingFinalizers (); |


Читайте также:
  1. II. 3. Определение потребности и выбор типов инвентарных зданий
  2. III. ТИПОВОЙ РАСЧЕТ
  3. Автоматическое создание раскройных карт
  4. Атрибуты, создание собственного класса атрибута
  5. Б) создание условий для занятия трудовой деятельностью;
  6. Бриф на создание Landing Page
  7. Бриф на создание многостраничного сайта-визитки

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

Первый подход заключается в переопределении метода System.Object.Finalize() и позволяет гарантировать то, что объект будет очищать себя сам во время процесса сборки мусора (когда бы тот не запускался) без вмешательства со стороны пользователя.

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

Оба подхода можно комбинировать и применять вместе в определении одного класса, получая преимущества от обеих моделей.

Если пользователь объекта не забыл вызвать метод Dispose(), можно проинформировать сборщик мусора о пропуске финализации, вызвав метод GC.SuppressFinalize().

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

Ниже приведена очередная версия класса MyResourceWrapper, которая теперь предусматривает выполнение и финализации и освобождения и содержится внутри проекта типа ConsoleApplication по имени FinalizableDisposableClass.

// Сложный упаковщик ресурсов.

public class MyResourceWrapper: IDisposable

{

// Сборщик мусора будет вызывать этот метод, если

// пользователь объекта забыл вызвать метод Dispose ().

~ MyResourceWrapper ()

{

// Освобождение любых внутренних неуправляемых

// ресурсов. Метод Dispose () HE должен вызываться

//ни для каких управляемых объектов.

}

// Пользователь объекта будет вызывать этот метод для

// того, чтобы освободить ресурсы как можно быстрее.


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


<== предыдущая страница | следующая страница ==>
Public enum GCCollectionMode| Формализованный шаблон очистки

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