ChangeMonitor Klasse

Definition

Stellt eine Basisklasse für einen abgeleiteten benutzerdefinierten Typ bereit, der Wechsel in den Zustand der Daten überwacht, auf den ein Cacheelement angewiesen ist.

public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
    interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
Vererbung
ChangeMonitor
Abgeleitet
Implementiert

Hinweise

Die ChangeMonitor -Klasse wird als Basisklasse für abgeleitete Überwachungsklassen verwendet, die für bestimmte Cacheimplementierungen spezialisiert sind. Eine ChangeMonitor instance überwacht Änderungen im Zustand der Daten, von denen ein Cacheelement abhängt. Das Element kann beispielsweise eine Datei- oder Datenentität sein, deren Inhalt zwischengespeichert wird. Wenn die Datei- oder Datenentität aktualisiert wird, muss auch der zugehörige Cacheeintrag geändert werden. Häufige Elemente, die überwacht werden können, sind Datenentitäten (z. B. Datenbankfelder, Werte, Zeilen oder Tabellen), ein anderer Cacheeintrag sowie Dateien und Dateiattribute.

Eine Abhängigkeitsänderung ist eine Änderung des Zustands einer Abhängigkeit. Wenn in einer typischen Cacheimplementierung ein ChangeMonitor instance den Cache benachrichtigt hat, dass sich eine Abhängigkeit geändert hat, führt der Cache die erforderliche Aktion aus, z. B. das Ungültigwerden des eingefügten Cacheeintrags.

Abgeleitete ChangeMonitor Klassen können angepasst werden, um Abhängigkeitsänderungen für bestimmte unterschiedliche Datenspeicher zu überwachen. Beispielsweise gibt es Cacheimplementierungen für ein Dateisystem, physischen Arbeitsspeicher oder eine Datenbank. Die ChangeMonitor -Klasse untersucht Änderungen, die außerhalb des Caches auftreten, und benachrichtigt dann den Cache, dass Änderungen aufgetreten sind.

Die .NET Framework enthält die folgenden Klassen, die von der -Klasse abgeleitet sindChangeMonitor:

Jede dieser Klassen arbeitet mit unterschiedlichen Abhängigkeitstypen. Beispielsweise überwacht die abgeleitete FileChangeMonitor Klasse Änderungen an einem Cache für Dateisystemdaten (Dateien und Ordner), von denen das Cacheelement abhängt.

Hinweise für Ausführende

Wenn Sie eine benutzerdefinierte Cacheimplementierung oder einen abgeleiteten Änderungsmonitortyp erstellen, müssen Sie bestimmte Richtlinien befolgen. In der folgenden Liste sind diese Richtlinien zusammengefasst. Weitere Informationen finden Sie in der Dokumentation zu einzelnen Methoden oder Eigenschaften.

  • Der Konstruktor einer abgeleiteten Klasse muss die -Eigenschaft festlegen, mit der UniqueId Überwachung beginnen und die Methode aufrufen InitializationComplete() , bevor die Methode zurückgegeben wird. Wenn ein Konstruktor bei Konstruktionen auf einen Fehler stößt und Ressourcen verwerfen muss, kann der Konstruktor die Dispose Überladung erst aufrufen, nachdem die InitializationComplete() Methode aufgerufen wurde, da die Überladung eine InvalidOperationException Ausnahme auslöst, wenn die Dispose Initialisierung nicht abgeschlossen ist.

  • Wenn Änderungen an den Daten auftreten, die vor Abschluss der Initialisierung überwacht werden, muss der Konstruktor die OnChanged(Object) -Methode aufrufen, bevor die InitializationComplete() -Methode aufgerufen wird.

  • Nachdem ein abgeleiteter ChangeMonitor Typ instanziiert wurde, müssen Sie den Monitor in eine benutzerdefinierte ObjectCache Implementierung einfügen. Oder rufen Sie die Dispose -Methode auf, wenn Sie mit der Verwendung des Änderungsmonitors fertig sind.

  • Nachdem ein ChangeMonitor instance in eine ObjectCache Implementierung eingefügt wurde, fordern die ObjectCache instance, dass der Änderungsmonitor verworfen wird. Auch wenn die Einfügung ungültig ist und eine Ausnahme verursacht, muss die ObjectCache Implementierung die Dispose Überladung aufrufen.

  • Nachdem ein abgeleiteter Änderungsmonitor in einen Cache eingefügt wurde, muss die ObjectCache Implementierung aufrufen NotifyOnChanged(OnChangedCallback), indem ein OnChangedCallback -Objekt übergeben wird. Die NotifyOnChanged(OnChangedCallback) Methode kann nur einmal aufgerufen werden. Wenn bereits eine Abhängigkeitsänderung aufgetreten ist, wird die OnChangedCallback instance sofort aufgerufen, wenn NotifyOnChanged(OnChangedCallback) aufgerufen wird. Andernfalls wird der OnChangedCallback instance nur einmal aufgerufen. Dieser einmalige Aufruf erfolgt entweder, wenn die OnChanged(Object) -Methode aufgerufen wird, weil der ChangeMonitor instance eine Änderung erkannt hat, oder wenn die Dispose() -Methode für ChangeMonitoraufgerufen wird, je nachdem, was zuerst auftritt.

  • Die OnChangedCallback instance, die von einer ObjectCache Implementierung bereitgestellt wird, sollte den zugeordneten Cacheeintrag entfernen und mithilfe der DependencyChanged Enumeration einen Grund angeben.

  • Ein ChangeMonitor instance kann die OnChanged(Object) -Methode aufrufen, bevor eine Cacheimplementierung die Methode aufgerufen NotifyOnChanged(OnChangedCallback) hat oder danach. Wenn die OnChanged(Object) Methode aufgerufen wird, bevor NotifyOnChanged(OnChangedCallback) aufgerufen wird, benachrichtigt die Basisimplementierung ChangeMonitor den Cache, dass dies aufgetreten ist, und löst den Rückruf aus, der sofort an übergeben NotifyOnChanged(OnChangedCallback) wird, wenn NotifyOnChanged(OnChangedCallback) aufgerufen wird. Alle Zustandsdaten, die an die OnChanged(Object) -Methode übergeben werden, werden vom Änderungsmonitor gespeichert und anschließend an die NotifyOnChanged(OnChangedCallback) -Methode übergeben, wenn die NotifyOnChanged(OnChangedCallback) -Methode aufgerufen wird.

  • Ein Änderungsmonitor muss die Dispose(Boolean) -Methode implementieren. Weitere Informationen finden Sie in der Dokumentation zur Dispose(Boolean)-Methode.

  • Die Dispose() Methodenüberladung muss aufgerufen werden, um die ChangeMonitor instance zu entsorgen. Die Regeln für das Aufrufen von Dispose sind wie folgt:

    • Bevor ein Element in den Cache eingefügt wird, liegt es in der Verantwortung des Aufrufers, eine ChangeMonitor instance zu entsorgen.

    • Sobald das Cacheelement und die ChangeMonitor damit verknüpften Instanzen an einen Cache übergeben werden, muss der Cacheimplementierer sicherstellen, dass die Dispose Methode aufgerufen wird, auch wenn beim Einfügen ein Fehler auftritt.

    • Nachdem ein Element und die zugehörigen ChangeMonitor Instanzen an einen Cache übergeben wurden, darf der Aufrufer die Abhängigkeit nicht verwerfen, da der Aufruf der Dispose Methode so behandelt wird, als ob sich die Abhängigkeit geändert hat. Daher wird die OnChanged(Object) -Methode automatisch aufgerufen.

  • Unter Berücksichtigung dieser Regeln muss die Dispose Methode auf eine der folgenden Arten aufgerufen werden:

    • Benutzer müssen die Dispose() Methodenüberladung aufrufen, wenn sie die abgeleitete Änderungsmonitor-instance nicht in einen Cache einfügen möchten.

    • Wenn die Implementierung versucht, den Change-Monitor-instance in einen Objektcache einzufügen, aber beim Einfügen ein Fehler auftritt, ist die Cacheimplementierung für den Aufruf der Dispose() Überladung verantwortlich. Wenn der Einfügeversuch eine Ausnahme verursacht, muss die Cacheimplementierung alle zugeordneten Abhängigkeiten verwerfen.

    • Wenn der Cacheeintrag entfernt wird, muss die Cacheimplementierung auch die Abhängigkeit entfernen.

    • Die interne Implementierung der OnChanged(Object) -Methode ruft die Dispose -Methode automatisch auf, nachdem sie einen Rückruf aufruft, der über NotifyOnChanged(OnChangedCallback)registriert ist.

Hinweis: Dieser automatische Aufruf der Dispose-Methode während des Auslösens des Ereignisses erfolgt nur, wenn die Initialisierung des ChangeMonitor instance zuvor abgeschlossen wurde.

Wenn der Konstruktor eines abgeleiteten Änderungsmonitors die InitializationComplete() -Methode aufruft, wenn sich der Zustand des Änderungsmonitors bereits geändert hat (d. h. der Zustand, der überwacht wird, als der Konstruktor noch aktiv war), wird der Änderungsmonitor von der InitializationComplete() Methode automatisch gelöscht.

Konstruktoren

ChangeMonitor()

Initialisiert eine neue Instanz der ChangeMonitor-Klasse. Dieser Konstruktor wird von Konstruktoren in abgeleiteten Klassen aufgerufen, um die Basisklasse zu initialisieren.

Eigenschaften

HasChanged

Ruft einen Wert ab, der angibt, dass der von der ChangeMonitor-Klasse überwachte Zustand geändert wurde.

IsDisposed

Ruft einen Wert ab, der angibt, dass die abgeleitete Instanz einer ChangeMonitor-Klasse freigegeben wird.

UniqueId

Ruft einen Wert ab, der die ChangeMonitor-Klasseninstanz darstellt.

Methoden

Dispose()

Gibt alle von der aktuellen Instanz der ChangeMonitor-Klasse verwendeten Ressourcen frei.

Dispose(Boolean)

Gibt alle verwalteten und nicht verwalteten Ressourcen und alle Verweise auf die ChangeMonitor-Instanz frei. Diese Überladung muss von abgeleiteten Änderungsüberwachungsklassen implementiert werden.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
InitializationComplete()

Wird vom Konstruktor abgeleiteter Klassen aufgerufen, um anzugeben, dass die Initialisierung abgeschlossen ist.

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
NotifyOnChanged(OnChangedCallback)

Wird von Cacheimplementierungen aufgerufen, um einen Rückruf zu registrieren und über den ObjectCache-Delegaten eine OnChangedCallback-Instanz zu benachrichtigen, wenn sich eine Abhängigkeit geändert hat.

OnChanged(Object)

Wird von abgeleiteten Klassen aufgerufen, um das Ereignis auszulösen, wenn sich eine Abhängigkeit ändert.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für:

Threadsicherheit

Dieser Typ ist threadsicher.

Weitere Informationen