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 После вставки экземпляра в ObjectCache реализацию экземпляр требует удаления ObjectCache монитора изменений. Даже если вставка является недопустимой и вызывает исключение, 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) |
Применяется к
Потокобезопасность
Этот тип является потокобезопасной.