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 zostanie zaktualizowana, 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 pliku.
Zmiana zależności to zmiana stanu zależności. W typowej implementacji pamięci podręcznej po ChangeMonitor wystąpieniu powiadamia pamięć podręczną 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. Istnieją na przykład implementacje pamięci podręcznej dla systemu plików, pamięci fizycznej lub bazy danych. Klasa ChangeMonitor sprawdza zmiany, które występują poza pamięcią podręczną, a następnie ostrzega pamięć podręczną, która nastąpiła.
Struktura .NET zawiera następujące klasy pochodzące z klasy ChangeMonitor:
Każda z tych klas 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.
Notatki dotyczące implementowania
Jeśli tworzysz niestandardową implementację pamięci podręcznej lub typ monitora zmian pochodnych, 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ąpią w monitorowanych danych 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 będzie wywoływane 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 nim. 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 przekazanie wywołania zwrotnego 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 zaimplementować metodę Dispose(Boolean) . Aby uzyskać więcej informacji, zobacz dokumentację Dispose(Boolean) metody.
Przeciążenie Dispose() metody musi być wywoływane w celu usunięcia ChangeMonitor wystąpienia. 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 jest usuwanie ChangeMonitor wystąpienia.
Gdy element pamięci podręcznej i ChangeMonitor skojarzone z nim wystąpienia są przekazywane do pamięci podręcznej, implementator pamięci podręcznej musi upewnić się, że Dispose metoda jest wywoływana, nawet jeśli wstawianie zakończy się niepowodzeniem.
Po przekazaniu elementu i skojarzonych z ChangeMonitor nim wystąpień do pamięci podręcznej obiekt wywołujący nie może usunąć zależności, ponieważ Dispose po 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, Dispose metoda musi być wywoływana w jeden z następujących sposobów:
Użytkownicy muszą wywołać Dispose() przeciążenie metody, jeśli zdecydują się nie wstawić wystąpienia pochodnego 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 zakończy się niepowodzeniem, 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ąć wszelkie 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 zainicjowanie ChangeMonitor wystąpienia zostało wcześniej ukończone.
Gdy konstruktor monitora zmian pochodnych wywołuje InitializationComplete() metodę, jeśli stan monitora zmian uległ już zmianie (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
truewartość po wywołaniu OnChanged(Object) metody przez wystąpienie pochodnego monitora zmian, niezależnie od tego, czy OnChangedCallback obiekt został ustawiony przez wywołanie NotifyOnChanged(OnChangedCallback) metody, czy nie.
Konstruktory
| Nazwa | Opis |
|---|---|
| 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
| Nazwa | Opis |
|---|---|
| HasChanged |
Pobiera wartość wskazującą, że stan monitorowany przez ChangeMonitor klasę uległ zmianie. |
| IsDisposed |
Pobiera wartość wskazującą, że wystąpienie ChangeMonitor pochodne klasy jest usuwane. |
| UniqueId |
Pobiera wartość reprezentującą ChangeMonitor wystąpienie klasy. |
Metody
| Nazwa | Opis |
|---|---|
| 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ć implementowane 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() |
Pobiera Type 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 Object. (Odziedziczone po Object) |
| NotifyOnChanged(OnChangedCallback) |
Wywoływane przez implementatory pamięci podręcznej w celu zarejestrowania 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, gdy zależność ulegnie zmianie. |
| ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Dotyczy
Bezpieczeństwo wątkowe
Ten typ jest bezpieczny wątkiem.