ChangeMonitor Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Udostępnia klasę bazową dla pochodnego typu niestandardowego, który monitoruje zmiany w stanie danych, od których zależy element pamięci podręcznej.
public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
- Dziedziczenie
-
ChangeMonitor
- Pochodne
- Implementuje
Uwagi
Klasa ChangeMonitor jest używana jako klasa bazowa dla klas monitorów pochodnych, które są wyspecjalizowane dla konkretnych implementacji pamięci podręcznej. Wystąpienie ChangeMonitor monitoruje zmiany stanu danych, od których zależy element pamięci podręcznej. Na przykład element może być jednostką pliku lub danych, której zawartość jest buforowana. Jeśli plik lub jednostka danych jest aktualizowana, należy również zmienić skojarzony wpis pamięci podręcznej. Typowe elementy, które można monitorować, obejmują jednostki danych (takie jak pola bazy danych, wartości, wiersze lub tabele), inny wpis pamięci podręcznej oraz pliki i atrybuty plików.
Zmiana zależności to zmiana stanu zależności. W typowej implementacji pamięci podręcznej po ChangeMonitor powiadomieniu pamięci podręcznej o zmianie zależności pamięć podręczna wykonuje wymaganą akcję, taką jak unieważnienie wstawionego wpisu pamięci podręcznej.
Klasy pochodne ChangeMonitor można dostosować do monitorowania zmian zależności dla określonych różnych magazynów danych. Na przykład istnieją implementacje pamięci podręcznej dla systemu plików, pamięci fizycznej lub bazy danych. Klasa ChangeMonitor sprawdza zmiany występujące poza pamięcią podręczną, a następnie powiadamia pamięć podręczną o zmianach.
.NET Framework zawiera następujące klasy pochodzące z ChangeMonitor klasy:
Każda z tych klas współdziała z różnymi typami zależności. Na przykład klasa pochodna FileChangeMonitor monitoruje zmiany w pamięci podręcznej dla danych systemu plików (plików i folderów), od których zależy element pamięci podręcznej.
Uwagi dotyczące implementowania
Jeśli tworzysz niestandardową implementację pamięci podręcznej lub typ pochodnego monitora zmian, musisz postępować zgodnie z pewnymi wytycznymi. Poniższa lista zawiera podsumowanie tych wytycznych. Aby uzyskać więcej informacji, zobacz dokumentację poszczególnych metod lub właściwości.
Konstruktor klasy pochodnej musi ustawić UniqueId właściwość, rozpocząć monitorowanie i wywołać InitializationComplete() metodę przed zwróceniem metody. Jeśli konstruktor napotka błąd podczas konstrukcji i musi usunąć zasoby, konstruktor może wywołać Dispose przeciążenie tylko po InitializationComplete() wywołaniu metody, ponieważ Dispose przeciążenie zgłosi InvalidOperationException wyjątek, jeśli inicjowanie nie zostanie ukończone.
Jeśli zmiany występują w danych monitorowanych przed ukończeniem inicjowania, konstruktor musi wywołać metodę OnChanged(Object) przed wywołaniem InitializationComplete() metody .
Po utworzeniu wystąpienia typu pochodnego ChangeMonitor należy wstawić monitor do implementacji niestandardowej ObjectCache . Lub jeśli skończysz korzystać z monitora zmian, wywołaj metodę Dispose .
ChangeMonitor Po wstawieniu wystąpienia do ObjectCache implementacji ObjectCache wystąpienie wymaga usunięcia monitora zmian. Nawet jeśli wstawianie jest nieprawidłowe i powoduje wyjątek, implementacja ObjectCache musi wywołać Dispose przeciążenie.
Po wstawieniu monitora zmian pochodnych do pamięci podręcznej implementacja ObjectCache musi wywołać NotifyOnChanged(OnChangedCallback)metodę OnChangedCallback , przekazując obiekt. Metodę NotifyOnChanged(OnChangedCallback) można wywołać tylko raz. Jeśli nastąpiła już zmiana zależności, OnChangedCallback wystąpienie zostanie wywołane natychmiast po NotifyOnChanged(OnChangedCallback) wywołaniu. OnChangedCallback W przeciwnym razie wystąpienie zostanie wywołane tylko raz. To jednorazowe wywołanie występuje, gdy OnChanged(Object) metoda jest wywoływana, ponieważ ChangeMonitor wystąpienie wykryło zmianę, lub gdy Dispose() metoda jest wywoływana w metodzie ChangeMonitor, w zależności od tego, co nastąpi wcześniej.
Wystąpienie OnChangedCallback udostępniane przez implementację ObjectCache powinno usunąć skojarzony wpis pamięci podręcznej i określić przyczynę przy użyciu DependencyChanged wyliczenia.
Wystąpienie ChangeMonitor może wywołać metodę OnChanged(Object) , zanim implementacja pamięci podręcznej wywoła NotifyOnChanged(OnChangedCallback) metodę lub po. OnChanged(Object) Jeśli metoda jest wywoływana przed NotifyOnChanged(OnChangedCallback) wywołaniem, implementacja podstawowa ChangeMonitor powiadomi pamięć podręczną o tym, że wystąpiła i wyzwoli wywołanie zwrotne, które ma zostać przekazane natychmiast NotifyOnChanged(OnChangedCallback) po NotifyOnChanged(OnChangedCallback) wywołaniu. Wszystkie dane stanu przekazywane do OnChanged(Object) metody są zapisywane przez monitor zmian, a następnie przekazywane do NotifyOnChanged(OnChangedCallback) metody po NotifyOnChanged(OnChangedCallback) wywołaniu metody.
Monitor zmian musi implementować metodę Dispose(Boolean) . Aby uzyskać więcej informacji, zobacz dokumentację Dispose(Boolean) metody.
Aby Dispose() usunąć ChangeMonitor wystąpienie, należy wywołać przeciążenie metody. Reguły wywoływania metody Dispose są następujące:
Zanim element zostanie wstawiony do pamięci podręcznej, obowiązkiem obiektu wywołującego ChangeMonitor jest usuwanie wystąpienia.
Gdy element pamięci podręcznej i ChangeMonitor skojarzone z nim wystąpienia zostaną przekazane do pamięci podręcznej, implementator pamięci podręcznej musi upewnić się, że Dispose metoda jest wywoływana, nawet jeśli wstawianie nie powiedzie się.
Po przekazaniu elementu i skojarzonych ChangeMonitor z nim wystąpień do pamięci podręcznej obiekt wywołujący nie może usunąć zależności, ponieważ po Dispose wywołaniu metody wywołanie jest traktowane tak, jakby zależność uległa zmianie. W związku z tym metoda jest wywoływana OnChanged(Object) automatycznie.
Biorąc pod uwagę te reguły, należy wywołać metodę Dispose w jeden z następujących sposobów:
Użytkownicy muszą wywołać Dispose() przeciążenie metody, jeśli zdecydują się nie wstawić pochodnego wystąpienia monitora zmian do pamięci podręcznej.
Jeśli implementacja próbuje wstawić wystąpienie monitora zmian do pamięci podręcznej obiektów, ale wstawianie nie powiedzie się, implementacja pamięci podręcznej jest odpowiedzialna za wywołanie Dispose() przeciążenia. Gdy próba wstawiania powoduje wyjątek, implementacja pamięci podręcznej musi usunąć wszystkie skojarzone zależności.
Jeśli wpis pamięci podręcznej zostanie usunięty, implementacja pamięci podręcznej musi również usunąć zależność.
Wewnętrzna implementacja OnChanged(Object) metody automatycznie wywołuje metodę Dispose po wywołaniu wywołania zwrotnego zarejestrowanego za pośrednictwem NotifyOnChanged(OnChangedCallback)metody .
Uwaga: to automatyczne wywołanie metody dispose podczas wyzwalania zdarzenia występuje tylko wtedy, gdy inicjowanie ChangeMonitor wystąpienia zostało wcześniej ukończone.
Gdy konstruktor monitora zmian pochodnych wywołuje InitializationComplete() metodę, jeśli stan monitora zmian został już zmieniony (tj. stan monitora zmian został już zmieniony, gdy konstruktor był nadal aktywny), InitializationComplete() metoda automatycznie usunie monitor zmian.
- Właściwość HasChanged jest ustawiana na
true
wartość po wywołaniu OnChanged(Object) metody przez pochodne wystąpienie monitora zmian, niezależnie od tego, czy OnChangedCallback obiekt został ustawiony przez wywołanie NotifyOnChanged(OnChangedCallback) metody , czy nie.
Konstruktory
ChangeMonitor() |
Inicjuje nowe wystąpienie klasy ChangeMonitor. Ten konstruktor jest wywoływany z konstruktorów w klasach pochodnych w celu zainicjowania klasy bazowej. |
Właściwości
HasChanged |
Pobiera wartość wskazującą, że stan monitorowany przez ChangeMonitor klasę uległ zmianie. |
IsDisposed |
Pobiera wartość wskazującą, że pochodne wystąpienie ChangeMonitor klasy jest usuwane. |
UniqueId |
Pobiera wartość reprezentującą ChangeMonitor wystąpienie klasy. |
Metody
Dispose() |
Zwalnia wszystkie zasoby używane przez bieżące wystąpienie ChangeMonitor klasy. |
Dispose(Boolean) |
Zwalnia wszystkie zarządzane i niezarządzane zasoby oraz wszelkie odwołania do ChangeMonitor wystąpienia. To przeciążenie musi być zaimplementowane przez pochodne klasy monitora zmian. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
InitializationComplete() |
Wywoływana z konstruktora klas pochodnych, aby wskazać, że inicjowanie zostało zakończone. |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
NotifyOnChanged(OnChangedCallback) |
Wywoływane przez implementatory pamięci podręcznej do rejestrowania wywołania zwrotnego i powiadamiania ObjectCache wystąpienia za pośrednictwem OnChangedCallback delegata, gdy zależność uległa zmianie. |
OnChanged(Object) |
Wywoływane przez klasy pochodne w celu podniesienia zdarzenia w przypadku zmiany zależności. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Dotyczy
Bezpieczeństwo wątkowe
Ten typ jest bezpieczny wątkowo.