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 de 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 monitor 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 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. Entre los elementos comunes que se pueden supervisar se 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 de caché típica, 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 a la memoria caché que se han producido cambios.
.NET Framework incluye las siguientes clases que derivan de la 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 . Solo NotifyOnChanged(OnChangedCallback) se puede llamar al método 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, solo se llamará a la OnChangedCallback instancia una vez. Esta llamada de una 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 de 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. Si se llama al OnChanged(Object) método antes NotifyOnChanged(OnChangedCallback) de llamar a , la implementación base ChangeMonitor notificará a la memoria caché que se ha producido y desencadenará que la devolución de llamada 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, vea la documentación del método Dispose(Boolean).
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 siguientes maneras:
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 provoca 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
true
en después de que la instancia derivada de change-monitor llame al OnChanged(Object) método , independientemente de si un OnChangedCallback objeto se ha establecido mediante una llamada al NotifyOnChanged(OnChangedCallback) método o no.
Constructores
ChangeMonitor() |
Inicializa una nueva instancia de la clase ChangeMonitor. Los constructores de clases derivadas llaman a este constructor para inicializar la clase base. |
Propiedades
HasChanged |
Obtiene un valor que indica que el estado supervisado por la clase ChangeMonitor ha cambiado. |
IsDisposed |
Obtiene un valor que indica que se elimina la instancia derivada de una clase ChangeMonitor. |
UniqueId |
Obtiene un valor que representa una instancia de la clase ChangeMonitor. |
Métodos
Dispose() |
Libera todos los recursos utilizados por la instancia actual de la clase ChangeMonitor. |
Dispose(Boolean) |
Libera todos los recursos administrados y no administrados así como todas las referencias a la instancia de ChangeMonitor. Esta sobrecarga la deben implementar las clases de supervisión de cambios derivadas. |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
InitializationComplete() |
Este método lo invoca el constructor de clases derivadas para indicar que ha finalizado la inicialización. |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
NotifyOnChanged(OnChangedCallback) |
Lo llaman los implementadores de memoria caché para registrar una devolución de llamada y notificar a una instancia de ObjectCache a través del delegado OnChangedCallback cuando una dependencia ha cambiado. |
OnChanged(Object) |
Este método lo invocan las 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 la ejecución de subprocesos.