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

Формализованный шаблон очистки

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


Читайте также:
  1. В чем заключается сущность очистки организма?
  2. Выбор технологических схем очистки судовых сточных вод
  3. Действие 1. Выбор и открытие шаблона.
  4. Делаем шаблон для Joomla 1.6
  5. Задание 1. Создать новый шаблон.
  6. Задание 3. Создать шаблон на основе существующих шаблонов в Word.
  7. Испытания судовых установок очистки сточных вод

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

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

Во-вторых, нелишне позаботиться о том, чтобы метод Finalize() не пытался избавиться от любых управляемых объектов, а метод Dispose() — наоборот, обязательно это делал.

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

Для решения подобных вопросов с дизайном в Microsoft создали формальный шаблон очистки, который позволяет достичь оптимального баланса между надежностью, удобством в обслуживании и производительностью. Ниже приведена окончательная версия MyResourceWrapper, в которой применяется упомянутый формальный шаблон.

public class MyResourceWrapper: IDisposable

{

// Используется для выяснения того, вызывался ли уже метод Dispose ().

private bool disposed = false;


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


<== предыдущая страница | следующая страница ==>
Создание финализируемых и высвобождаемых типов| Cleanup(false);

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