ChangeMonitor Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Proporciona una clase base para un tipo personalizado derivado que supervisa los cambios en el estado de los datos de los que depende un elemento de caché.
public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
- Herencia
-
ChangeMonitor
- Derivado
- Implementaciones
Comentarios
La ChangeMonitor clase se usa como clase base para las clases de supervisión derivadas especializadas para implementaciones de caché concretas. Una ChangeMonitor instancia supervisa los cambios en el estado de los datos de los que depende un elemento de caché. Por ejemplo, el elemento puede ser un archivo o una entidad de datos cuyo contenido se almacena en caché. Si se actualiza el archivo o la entidad de datos, también se debe cambiar la entrada de caché asociada. Los elementos comunes que se pueden supervisar incluyen entidades de datos (como campos de base de datos, valores, filas o tablas), otra entrada de caché y archivos y atributos de archivo.
Un cambio de dependencia es un cambio en el estado de una dependencia. En una implementación típica de caché, después de que una ChangeMonitor instancia notifique a la memoria caché que ha cambiado una dependencia, la memoria caché realiza la acción necesaria, como invalidar la entrada de caché insertada.
Las clases derivadas ChangeMonitor se pueden personalizar para supervisar los cambios de dependencia para almacenes de datos específicos. Por ejemplo, hay implementaciones de caché para un sistema de archivos, memoria física o una base de datos. La ChangeMonitor clase examina los cambios que se producen fuera de la memoria caché y, a continuación, alerta de la memoria caché que se han producido cambios.
.NET Framework incluye las siguientes clases que derivan de ChangeMonitor clase:
Cada una de estas clases funciona con diferentes tipos de dependencias. Por ejemplo, la clase derivada FileChangeMonitor supervisa los cambios en una caché de datos del sistema de archivos (archivos y carpetas) de los que depende el elemento de caché.
Notas a los implementadores
Si crea una implementación de caché personalizada o un tipo de monitor de cambio derivado, debe seguir ciertas directrices. En la lista siguiente se resumen estas directrices. Para obtener más información, consulte la documentación de métodos o propiedades individuales.
El constructor de una clase derivada debe establecer la propiedad, comenzar la UniqueId supervisión y llamar al InitializationComplete() método antes de que el método devuelva. Si un constructor encuentra un error durante las construcciones y debe tener que eliminar recursos, el constructor solo puede llamar a la Dispose sobrecarga después de llamar al InitializationComplete() método porque la sobrecarga producirá una InvalidOperationException excepción si no se completa la Dispose inicialización.
Si se producen cambios en los datos que se supervisan antes de que se complete la inicialización, el constructor debe llamar al OnChanged(Object) método antes de llamar al InitializationComplete() método .
Una vez creado una instancia de un tipo derivado ChangeMonitor , debe insertar el monitor en una implementación personalizada ObjectCache . O bien, si ha terminado de usar el monitor de cambios, llame al Dispose método .
Después de insertar una ChangeMonitor instancia en una ObjectCache implementación, la ObjectCache instancia requiere que se elimine el monitor de cambios. Incluso si la inserción no es válida y produce una excepción, la ObjectCache implementación debe llamar a la Dispose sobrecarga.
Después de insertar un monitor de cambios derivado en una memoria caché, la ObjectCache implementación debe llamar a NotifyOnChanged(OnChangedCallback), pasando un OnChangedCallback objeto . El NotifyOnChanged(OnChangedCallback) método solo se puede llamar una vez. Si ya se ha producido un cambio de dependencia, se llamará a la OnChangedCallback instancia inmediatamente cuando NotifyOnChanged(OnChangedCallback) se llame a . De lo contrario, la OnChangedCallback instancia solo se llamará una vez. Esta llamada de una sola vez se produce cuando se llama al OnChanged(Object) método porque la ChangeMonitor instancia detectó un cambio o cuando se llama al Dispose() método en , ChangeMonitorlo que ocurra primero.
La OnChangedCallback instancia proporcionada por una ObjectCache implementación debe quitar la entrada de caché asociada y especificar un motivo mediante la DependencyChanged enumeración .
Una ChangeMonitor instancia puede llamar al OnChanged(Object) método antes de que una implementación de caché haya llamado al NotifyOnChanged(OnChangedCallback) método o después. OnChanged(Object) Si se llama al método antes NotifyOnChanged(OnChangedCallback) de llamar a , la implementación base ChangeMonitor notificará a la memoria caché que se ha producido y desencadenará la devolución de llamada a que se pase inmediatamente NotifyOnChanged(OnChangedCallback) cuando NotifyOnChanged(OnChangedCallback) se invoque. El monitor de cambios guarda los datos de estado que se pasan al OnChanged(Object) método y, posteriormente, se pasan al NotifyOnChanged(OnChangedCallback) método cuando se invoca el NotifyOnChanged(OnChangedCallback) método .
Un monitor de cambios debe implementar el Dispose(Boolean) método . Para obtener más información, consulte la documentación del Dispose(Boolean) método.
Se Dispose() debe llamar a la sobrecarga del método para eliminar la ChangeMonitor instancia. Las reglas para llamar a Dispose son las siguientes:
Antes de insertar un elemento en la memoria caché, es responsabilidad del autor de la llamada eliminar una ChangeMonitor instancia.
Una vez que el elemento de caché y las ChangeMonitor instancias asociadas a ella se pasan a una memoria caché, el implementador de caché debe asegurarse de que se llama al Dispose método, incluso si se produce un error en la inserción.
Después de pasar un elemento y sus instancias asociadas ChangeMonitor a una memoria caché, el autor de la llamada no debe eliminar la dependencia porque cuando se llama al Dispose método , la llamada se trata como si la dependencia hubiera cambiado. Como resultado, el OnChanged(Object) método se invoca automáticamente.
Teniendo en cuenta estas reglas, se debe llamar al Dispose método de una de las maneras siguientes:
Los usuarios deben llamar a la sobrecarga del Dispose() método si deciden no insertar la instancia derivada del monitor de cambios en una memoria caché.
Si la implementación intenta insertar la instancia de change-monitor en una caché de objetos, pero se produce un error en la inserción, la implementación de la memoria caché es responsable de llamar a la Dispose() sobrecarga. Cuando el intento de inserción produce una excepción, la implementación de caché debe eliminar las dependencias asociadas.
Si se quita la entrada de caché, la implementación de caché también debe eliminar la dependencia.
La implementación interna del OnChanged(Object) método llama automáticamente al Dispose método después de llamar a una devolución de llamada registrada a través NotifyOnChanged(OnChangedCallback)de .
Nota: Esta llamada automática al método dispose durante la activación del evento solo se produce si la inicialización de la ChangeMonitor instancia se completó anteriormente.
Cuando el constructor de un monitor de cambios derivado llama al InitializationComplete() método , si el estado del monitor de cambios ya ha cambiado (es decir, el estado que ya se supervisa cuando el constructor todavía estaba activo), el InitializationComplete() método eliminará automáticamente el monitor de cambios.
- La HasChanged propiedad se establece en
truedespués de llamar al OnChanged(Object) método mediante la instancia derivada de change-monitor, independientemente de si un OnChangedCallback objeto se ha establecido mediante una llamada al NotifyOnChanged(OnChangedCallback) método o no.
Constructores
| Nombre | Description |
|---|---|
| ChangeMonitor() |
Inicializa una nueva instancia de la clase ChangeMonitor. Este constructor se llama desde constructores de clases derivadas para inicializar la clase base. |
Propiedades
| Nombre | Description |
|---|---|
| HasChanged |
Obtiene un valor que indica que el estado supervisado por la ChangeMonitor clase ha cambiado. |
| IsDisposed |
Obtiene un valor que indica que se elimina la instancia derivada de una ChangeMonitor clase. |
| UniqueId |
Obtiene un valor que representa la instancia de ChangeMonitor clase. |
Métodos
| Nombre | Description |
|---|---|
| Dispose() |
Libera todos los recursos que usa la instancia actual de la ChangeMonitor clase . |
| Dispose(Boolean) |
Libera todos los recursos administrados y no administrados y las referencias a la ChangeMonitor instancia. Esta sobrecarga debe implementarse mediante clases derivadas de change-monitor. |
| Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
| GetHashCode() |
Sirve como función hash predeterminada. (Heredado de Object) |
| GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
| InitializationComplete() |
Se llama desde el constructor de clases derivadas para indicar que finaliza la inicialización. |
| MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
| NotifyOnChanged(OnChangedCallback) |
Llamado por los implementadores de caché para registrar una devolución de llamada y notificar a una ObjectCache instancia a través del OnChangedCallback delegado cuando ha cambiado una dependencia. |
| OnChanged(Object) |
Llamado por clases derivadas para generar el evento cuando cambia una dependencia. |
| ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
Se aplica a
Seguridad para subprocesos
Este tipo es seguro para subprocesos.