ChangeMonitor Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет базовый класс производного пользовательского типа, отслеживающего изменения в состоянии данных, от которых зависит элемент кэша.
public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
- Наследование
-
ChangeMonitor
- Производный
- Реализации
Комментарии
Класс ChangeMonitor используется в качестве базового класса для производных классов монитора, специализированных для конкретных реализаций кэша. Экземпляр ChangeMonitor отслеживает изменения в состоянии данных, от которых зависит элемент кэша. Например, элементом может быть файл или сущность данных, содержимое которой кэшировано. При обновлении файла или сущности данных необходимо также изменить соответствующую запись кэша. К распространенным элементам, которые можно отслеживать, относятся сущности данных (например, поля базы данных, значения, строки или таблицы), другая запись кэша, а также атрибуты файлов и файлов.
Изменение зависимости — это изменение состояния зависимости. В типичной реализации кэша после того, как ChangeMonitor экземпляр уведомляет кэш об изменении зависимости, кэш выполняет необходимое действие, например делает вставленную запись кэша недействительной.
Производные ChangeMonitor классы можно настроить для отслеживания изменений зависимостей для конкретных различных хранилищ данных. Например, существуют реализации кэша для файловой системы, физической памяти или базы данных. Класс ChangeMonitor проверяет изменения, происходящие за пределами кэша, а затем оповещает кэш о произошедших изменениях.
Платформа .NET Framework включает следующие классы, производные от ChangeMonitor класса :
Каждый из этих классов работает с разными типами зависимостей. Например, производный FileChangeMonitor класс отслеживает изменения в кэше для данных файловой системы (файлов и папок), от которые зависит элемент кэша.
Примечания для тех, кто реализует этот метод
При создании пользовательской реализации кэша или производного типа монитора изменений необходимо следовать определенным рекомендациям. В следующем списке перечислены эти рекомендации. Дополнительные сведения см. в документации по отдельным методам или свойствам.
Конструктор производного класса должен задать UniqueId свойство , начать мониторинг и вызвать InitializationComplete() метод до возврата метода. Если конструктор обнаруживает ошибку во время построения и должен удалить ресурсы, конструктор может вызывать перегрузку Dispose только после InitializationComplete() вызова метода , так как перегрузка Dispose вызовет InvalidOperationException исключение, если инициализация не завершена.
Если в отслеживаемых данных происходят изменения до завершения инициализации, конструктор должен вызвать OnChanged(Object) метод перед вызовом InitializationComplete() метода .
После создания экземпляра производного ChangeMonitor типа необходимо вставить монитор в пользовательскую ObjectCache реализацию. Если вы завершили работу с монитором изменений, вызовите Dispose метод .
После вставки экземпляра ChangeMonitor в реализацию ObjectCacheObjectCache экземпляр требует удаления монитора изменений. Даже если вставка является недопустимой и вызывает исключение, ObjectCache реализация должна вызвать перегрузку Dispose .
После вставки производного монитора изменений в кэш ObjectCache реализация должна вызвать NotifyOnChanged(OnChangedCallback), передав объект OnChangedCallback . Метод NotifyOnChanged(OnChangedCallback) можно вызвать только один раз. Если изменение зависимости уже произошло, OnChangedCallback экземпляр будет вызываться немедленно при NotifyOnChanged(OnChangedCallback) вызове . OnChangedCallback В противном случае экземпляр будет вызываться только один раз. Этот разовый вызов происходит либо при вызове OnChanged(Object) метода, так как ChangeMonitor экземпляр обнаружил изменение, либо при вызове Dispose() метода в ChangeMonitor, в зависимости от того, что произойдет первым.
Экземпляр OnChangedCallback , предоставляемый реализацией ObjectCache , должен удалить связанную запись кэша и указать причину с помощью перечисления DependencyChanged .
Экземпляр ChangeMonitor может вызвать OnChanged(Object) метод до того, как реализация кэша вызвала NotifyOnChanged(OnChangedCallback) метод, или после. OnChanged(Object) Если метод вызывается до NotifyOnChanged(OnChangedCallback) вызова , базовая ChangeMonitor реализация уведомит кэш о том, что это произошло, и активирует обратный вызов, который будет передан NotifyOnChanged(OnChangedCallback) немедленно при NotifyOnChanged(OnChangedCallback) вызове. Все данные о состоянии, передаваемые методу OnChanged(Object) , сохраняются монитором изменений и затем передаются методу NotifyOnChanged(OnChangedCallback) при вызове NotifyOnChanged(OnChangedCallback) метода .
Монитор изменений должен реализовывать Dispose(Boolean) метод . Дополнительные сведения см. в документации метода Dispose(Boolean).
Для Dispose() удаления экземпляра необходимо вызвать перегрузку ChangeMonitor метода. Ниже приведены правила для вызова Dispose.
Перед вставкой элемента в кэш вызывающий объект отвечает за удаление экземпляра ChangeMonitor .
После того как элемент кэша и ChangeMonitor связанные с ним экземпляры передаются в кэш, реализующий кэш должен убедиться, что Dispose метод вызывается, даже если не удается выполнить вставку.
После того как элемент и связанные с ним ChangeMonitor экземпляры передаются в кэш, вызывающий объект не должен удалять зависимость, так как при Dispose вызове метода вызов обрабатывается так, как если бы зависимость изменилась. В результате OnChanged(Object) метод вызывается автоматически.
Учитывая эти правила, Dispose метод должен вызываться одним из следующих способов:
Пользователи должны вызвать перегрузку Dispose() метода, если они решили не вставлять производный экземпляр монитора изменений в кэш.
Если реализация пытается вставить экземпляр монитора изменений в кэш объектов, но вставка завершается ошибкой, реализация кэша отвечает за вызов перегрузки Dispose() . Когда попытка вставки вызывает исключение, реализация кэша должна удалить все связанные зависимости.
Если запись кэша удалена, реализация кэша также должна удалить зависимость.
Внутренняя OnChanged(Object) реализация метода автоматически вызывает Dispose метод после вызова обратного вызова, зарегистрированного с помощью NotifyOnChanged(OnChangedCallback).
Примечание. Этот автоматический вызов метода dispose во время срабатывания события происходит только в том случае, если инициализация ChangeMonitor экземпляра была завершена ранее.
Если конструктор производного монитора изменений вызывает InitializationComplete() метод , если состояние монитора изменений уже изменилось (т. е. состояние, которое отслеживается, уже изменилось, когда конструктор был еще активен), то InitializationComplete() метод автоматически удаляет монитор изменений.
- Свойству HasChanged присваивается значение
true
после OnChanged(Object) вызова метода производным экземпляром монитора изменений независимо от того, был ли OnChangedCallback объект задан вызовом NotifyOnChanged(OnChangedCallback) метода .
Конструкторы
ChangeMonitor() |
Инициализирует новый экземпляр класса ChangeMonitor. Этот конструктор вызывается конструкторами в производных классах для инициализации базового класса. |
Свойства
HasChanged |
Получает значение, указывающее, что состояние, отслеживаемое классом ChangeMonitor, изменилось. |
IsDisposed |
Получает значение, указывающее, что производный экземпляр класса ChangeMonitor удален. |
UniqueId |
Получает значение, представляющее экземпляр класса ChangeMonitor. |
Методы
Dispose() |
Освобождает все ресурсы, используемые текущим экземпляром класса ChangeMonitor. |
Dispose(Boolean) |
Освобождает все управляемые и неуправляемые ресурсы и все ссылки на экземпляр ChangeMonitor. Эту перегрузку необходимо реализовывать в производных классах, контролирующих изменения. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
InitializationComplete() |
Вызывается из конструктора производных классов и указывает на завершение инициализации. |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
NotifyOnChanged(OnChangedCallback) |
Вызывается средствами реализации кэша для регистрации обратного вызова и уведомления экземпляра ObjectCache об изменении зависимости с использованием делегата OnChangedCallback. |
OnChanged(Object) |
Вызывается производными классами для создания события при изменении зависимости. |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Применяется к
Потокобезопасность
Данный тип потокобезопасен.