ChangeMonitor Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Tillhandahåller en basklass för en härledd anpassad typ som övervakar ändringar i tillståndet för de data som ett cacheobjekt är beroende av.
public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
- Arv
-
ChangeMonitor
- Härledda
- Implementeringar
Kommentarer
Klassen ChangeMonitor används som basklass för härledda övervakningsklasser som är specialiserade för specifika cacheimplementeringar. En ChangeMonitor instans övervakar ändringar i tillståndet för data som ett cacheobjekt är beroende av. Objektet kan till exempel vara en fil eller dataentitet vars innehåll cachelagras. Om filen eller dataentiteten uppdateras måste även den associerade cacheposten ändras. Vanliga objekt som kan övervakas är dataentiteter (till exempel databasfält, värden, rader eller tabeller), en annan cachepost och filer och filattribut.
En beroendeändring är en ändring i tillståndet för ett beroende. I en typisk cacheimplementering, när en ChangeMonitor instans meddelar cachen att ett beroende har ändrats, utför cachen den nödvändiga åtgärden, till exempel att ogiltigförklara den infogade cacheposten.
Härledda ChangeMonitor klasser kan anpassas för att övervaka beroendeändringar för specifika olika datalager. Det finns till exempel cacheimplementeringar för ett filsystem, fysiskt minne eller en databas. Klassen ChangeMonitor undersöker ändringar som sker utanför cacheminnet och varnar sedan cacheminnet om att ändringar har inträffat.
.NET Framework innehåller följande klasser som härleds från klassen ChangeMonitor:
Var och en av dessa klasser fungerar med olika typer av beroenden. Till exempel övervakar den härledda FileChangeMonitor klassen ändringar i en cache för filsystemdata (filer och mappar) som cacheobjektet är beroende av.
Anteckningar till implementerare
Om du skapar en anpassad cacheimplementering eller en härledd ändringsövervakartyp måste du följa vissa riktlinjer. I följande lista sammanfattas dessa riktlinjer. Mer information finns i dokumentationen för enskilda metoder eller egenskaper.
Konstruktorn för en härledd klass måste ange UniqueId egenskapen, börja övervaka och anropa InitializationComplete() metoden innan metoden returneras. Om en konstruktor stöter på ett fel under konstruktioner och måste ta bort resurser kan konstruktorn bara anropa överlagringen DisposeInitializationComplete() efter att metoden anropas eftersom överbelastningen Dispose utlöser ett InvalidOperationException undantag om initieringen inte har slutförts.
Om ändringar sker i de data som övervakas innan initieringen är klar måste konstruktorn anropa OnChanged(Object) metoden innan metoden anropas InitializationComplete() .
När en härledd ChangeMonitor typ har instansierats måste du infoga övervakaren i en anpassad ObjectCache implementering. Eller om du är klar med ändringsövervakaren anropar du Dispose metoden.
När en ChangeMonitor instans har infogats i en ObjectCache implementering kräver instansen ObjectCache att ändringsövervakaren tas bort. Även om infogningen är ogiltig och orsakar ett undantag ObjectCache måste implementeringen anropa överbelastningen Dispose .
När en övervakare för härledd ändring har infogats i en cache ObjectCache måste implementeringen anropa NotifyOnChanged(OnChangedCallback), genom att skicka ett OnChangedCallback objekt. Metoden NotifyOnChanged(OnChangedCallback) kan bara anropas en gång. Om en beroendeändring redan har inträffat anropas instansen OnChangedCallback omedelbart när NotifyOnChanged(OnChangedCallback) anropas. Annars anropas instansen OnChangedCallback bara en gång. Det här engångsanropet OnChanged(Object) inträffar antingen när metoden anropas eftersom instansen ChangeMonitor har identifierat en ändring eller när Dispose() metoden anropas på ChangeMonitor, beroende på vilket som inträffar först.
Den OnChangedCallback instans som tillhandahålls av en ObjectCache implementering bör ta bort den associerade cacheposten och ange en orsak med hjälp DependencyChanged av uppräkningen.
En ChangeMonitor instans kan anropa OnChanged(Object) metoden antingen innan en cacheimplementering har anropat NotifyOnChanged(OnChangedCallback) metoden eller efter. OnChanged(Object) Om metoden anropas innan NotifyOnChanged(OnChangedCallback) anropas meddelar basimplementeringen ChangeMonitor cachen om att detta har inträffat och utlöser återanropet som skickas till NotifyOnChanged(OnChangedCallback) omedelbart när NotifyOnChanged(OnChangedCallback) anropas. Tillståndsdata som skickas till OnChanged(Object) metoden sparas av ändringsövervakaren och skickas därefter till NotifyOnChanged(OnChangedCallback) metoden när NotifyOnChanged(OnChangedCallback) metoden anropas.
En ändringsövervakare måste implementera Dispose(Boolean) metoden. Mer information finns i metoddokumentationen Dispose(Boolean) .
Metodöverlagringen Dispose() måste anropas för att ta bort instansen ChangeMonitor . Reglerna för att anropa Avyttra är följande:
Innan ett objekt infogas i cacheminnet är det uppringarens ansvar att ta bort en ChangeMonitor instans.
När cacheobjektet och de ChangeMonitor instanser som är associerade med det har skickats till en cache måste cache-implementeraren se till att Dispose metoden anropas, även om infogningen misslyckas.
När ett objekt och dess associerade ChangeMonitor instanser har skickats till en cache får anroparen inte ta bort beroendet eftersom anropet behandlas som om beroendet har ändrats när Dispose metoden anropas. Därför OnChanged(Object) anropas metoden automatiskt.
Med dessa regler i åtanke Dispose måste metoden anropas på något av följande sätt:
Användarna måste anropa metodens Dispose() överlagring om de bestämmer sig för att inte infoga den härledda instansen för ändringsövervakare i en cache.
Om implementeringen försöker infoga instansen för ändringsövervakaren i ett objektcachen men infogningen misslyckas ansvarar cacheimplementeringen för att anropa överbelastningen Dispose() . När infogningsförsöket orsakar ett undantag måste cacheimplementeringen ta bort eventuella associerade beroenden.
Om cacheposten tas bort måste cacheimplementeringen också ta bort beroendet.
Den interna implementeringen av OnChanged(Object) metoden anropar Dispose automatiskt metoden när den anropar ett återanrop som har registrerats via NotifyOnChanged(OnChangedCallback).
Obs! Det här automatiska anropet till metoden för bortskaffning under händelseavfyrningen inträffar endast om initieringen av instansen ChangeMonitor har slutförts tidigare.
När konstruktorn för en härledd ändringsövervakare anropar InitializationComplete() metoden, om tillståndet för ändringsövervakaren redan har ändrats (dvs. tillståndet som övervakas har redan ändrats när konstruktorn fortfarande var aktiv) InitializationComplete() kommer metoden automatiskt att ta bort ändringsövervakaren.
- Egenskapen HasChanged anges till efter
trueatt OnChanged(Object) metoden anropas av den härledda change-monitor-instansen, oavsett om ett OnChangedCallback objekt har angetts av ett anrop till NotifyOnChanged(OnChangedCallback) metoden eller inte.
Konstruktorer
| Name | Description |
|---|---|
| ChangeMonitor() |
Initierar en ny instans av ChangeMonitor klassen. Den här konstruktorn anropas från konstruktorer i härledda klasser för att initiera basklassen. |
Egenskaper
| Name | Description |
|---|---|
| HasChanged |
Hämtar ett värde som anger att tillståndet som övervakas av ChangeMonitor klassen har ändrats. |
| IsDisposed |
Hämtar ett värde som anger att den härledda instansen av en ChangeMonitor klass tas bort. |
| UniqueId |
Hämtar ett värde som representerar klassinstansen ChangeMonitor . |
Metoder
| Name | Description |
|---|---|
| Dispose() |
Frigör alla resurser som används av den aktuella instansen ChangeMonitor av klassen. |
| Dispose(Boolean) |
Släpper alla hanterade och ohanterade resurser och eventuella referenser till instansen ChangeMonitor . Den här överlagringen måste implementeras av härledda ändringsövervakarklasser. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| InitializationComplete() |
Anropas från konstruktorn för härledda klasser för att indikera att initieringen är klar. |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| NotifyOnChanged(OnChangedCallback) |
Anropas av Cache-implementerare för att registrera ett återanrop och meddela en ObjectCache instans via ombudet OnChangedCallback när ett beroende har ändrats. |
| OnChanged(Object) |
Anropas av härledda klasser för att generera händelsen när ett beroende ändras. |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |
Gäller för
Trådsäkerhet
Den här typen är trådsäker.