Поделиться через


ChangeMonitor.Dispose Метод

Определение

Освобождает все ресурсы, используемые текущим экземпляром класса ChangeMonitor.

Перегрузки

Dispose()

Освобождает все ресурсы, используемые текущим экземпляром класса ChangeMonitor.

Dispose(Boolean)

Освобождает все управляемые и неуправляемые ресурсы и все ссылки на экземпляр ChangeMonitor. Эту перегрузку необходимо реализовывать в производных классах, контролирующих изменения.

Комментарии

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

Dispose()

Исходный код:
ChangeMonitor.cs
Исходный код:
ChangeMonitor.cs
Исходный код:
ChangeMonitor.cs

Освобождает все ресурсы, используемые текущим экземпляром класса ChangeMonitor.

public:
 virtual void Dispose();
public void Dispose ();
abstract member Dispose : unit -> unit
override this.Dispose : unit -> unit
Public Sub Dispose ()

Реализации

Исключения

Инициализация не завершена в производном классе монитора изменений, который вызвал базовый метод Dispose().

Комментарии

Метод Dispose вызывает Dispose метод производных классов только один раз, при первом его вызове. Последующие вызовы метода не оказывают никакого Dispose влияния. После вызова метода свойству IsDisposed присваивается значение true.

Перегрузка Dispose должна вызываться для удаления экземпляра ChangeMonitor . Ниже приведены правила для вызова метода dispose.

  • Перед вставкой элемента в кэш вызывающий объект отвечает за удаление экземпляра ChangeMonitor .

  • После того как элемент кэша ChangeMonitor и связанные с ним экземпляры передаются в кэш, реализующий кэш должен убедиться, что Dispose вызывается, даже если вставка завершается ошибкой.

  • После того как элемент и связанные с ним ChangeMonitor экземпляры передаются в кэш, вызывающий объект не должен удалять зависимость, так как при Dispose вызове метода вызов обрабатывается так, как если бы зависимость изменилась. В результате OnChanged метод вызывается автоматически.

  • Учитывая эти правила, Dispose метод должен вызываться одним из следующих способов:

    • Пользователи должны вызывать перегрузку Dispose метода, если они решили не вставлять производный экземпляр монитора изменений в кэш.

    • Реализация кэша отвечает за вызов перегрузки, Dispose если реализация пытается вставить экземпляр монитора изменений в кэш объектов, но вставка завершается ошибкой. Когда попытка вставки вызывает исключение, реализация кэша должна удалить все связанные зависимости.

    • Если запись кэша удалена, реализация кэша также должна удалить зависимость.

Внутренняя OnChanged реализация метода автоматически вызывает Dispose метод после вызова обратного вызова, зарегистрированного с помощью NotifyOnChanged метода .

Примечание

Это автоматическое удаление во время срабатывания события происходит только в том случае, если инициализация экземпляра ChangeMonitor завершена ранее.

Когда конструктор производного монитора изменений вызывает InitializationComplete метод , если состояние монитора изменений уже изменилось (т. е. состояние, которое отслеживается, уже изменилось, когда конструктор был еще активным), метод InitializationComplete автоматически удаляет монитор изменений.

Примечание

Пользователи не должны вызывать Dispose метод . Однако нельзя запретить пользователям вызывать метод . Таким образом, если они это делают, OnChanged вызывается метод . В этом случае запись кэша получает уведомление, как если бы зависимость изменилась.

Чтобы предотвратить переопределение метода производными Dispose классами, метод не является явной реализацией интерфейса.

См. также раздел

Применяется к

Dispose(Boolean)

Исходный код:
ChangeMonitor.cs
Исходный код:
ChangeMonitor.cs
Исходный код:
ChangeMonitor.cs

Освобождает все управляемые и неуправляемые ресурсы и все ссылки на экземпляр ChangeMonitor. Эту перегрузку необходимо реализовывать в производных классах, контролирующих изменения.

protected:
 abstract void Dispose(bool disposing);
protected abstract void Dispose (bool disposing);
abstract member Dispose : bool -> unit
Protected MustOverride Sub Dispose (disposing As Boolean)

Параметры

disposing
Boolean

Значение true, чтобы освободить управляемые и неуправляемые ресурсы и любые ссылки на экземпляр ChangeMonitor; значение false, чтобы освободить только неуправляемые ресурсы. Если передается значение false, метод Dispose(Boolean) вызывается потоком finalizer, а любые внешние управляемые ссылки в большинстве случаев становятся недействительными, так как они уже были очищены сборщиком мусора.

Комментарии

Если значение disposing равно true, все управляемые и неуправляемые ресурсы удаляются, а все ссылки на этот объект освобождаются, чтобы можно было собрать мусор в производном экземпляре монитора изменений. Гарантируется, что базовый Dispose метод будет вызывать реализованный Dispose метод только один раз.

Примечания для тех, кто реализует этот метод

Монитор изменений должен реализовать перегрузку Dispose(Boolean) , чтобы освободить все управляемые и неуправляемые ресурсы, если значение disposing равно true. Перегрузка Dispose(Boolean) метода со значением disposingtrue вызывается только один раз, а именно при первом удалении экземпляра. Монитор изменений не должен вызывать перегрузку Dispose(Boolean) напрямую. Производный монитор изменений может вызывать открытый метод без Dispose() параметров в базовом ChangeMonitor классе.

Кроме того, монитор изменений может реализовать метод завершения. В этом случае метод завершения может вызвать Dispose(Boolean) метод и передать ему disposing значение false. Однако обычно это не требуется. Мониторинг изменений зависимостей обычно выполняется службой, которая сохраняет ссылку на экземпляр монитора изменений. Ссылка предотвращает сбор мусора экземпляра и, следовательно, делает метод завершения ненужным. Чтобы избежать утечки памяти, при изменении OnChanged(Object) зависимости метод удаляет экземпляр монитора изменений (если инициализация не завершена).

Применяется к