ChangeMonitor クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
キャッシュ アイテムが依存するデータの状態の変化を監視する、派生したカスタム型の基本クラスを提供します。
public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
- 継承
-
ChangeMonitor
- 派生
- 実装
注釈
ChangeMonitorクラスは、特定のキャッシュ実装に特化した派生モニター クラスの基底クラスとして使用されます。 インスタンスは ChangeMonitor 、キャッシュ 項目が依存するデータの状態の変化を監視します。 たとえば、アイテムには、コンテンツがキャッシュされているファイルまたはデータ エンティティを指定できます。 ファイルまたはデータ エンティティが更新された場合は、関連付けられているキャッシュ エントリも変更する必要があります。 監視できる一般的な項目には、データ エンティティ (データベース フィールド、値、行、テーブルなど)、別のキャッシュ エントリ、ファイルとファイル属性があります。
依存関係の変更は、依存関係の状態の変化です。 一般的なキャッシュ実装では、インスタンスが依存関係が変更されたことをキャッシュに通知した後 ChangeMonitor 、キャッシュは挿入されたキャッシュ エントリを無効にするなどの必要なアクションを実行します。
派生 ChangeMonitor クラスをカスタマイズして、特定の異なるデータ ストアの依存関係の変更を監視できます。 たとえば、ファイル システム、物理メモリ、またはデータベースのキャッシュ実装があります。 クラスは ChangeMonitor 、キャッシュの外部で発生した変更を調べ、変更が発生したことをキャッシュに警告します。
.NET Frameworkには、クラスからChangeMonitor派生した次のクラスが含まれています。
これらの各クラスは、さまざまな種類の依存関係で動作します。 たとえば、派生クラスは FileChangeMonitor 、キャッシュ項目が依存するファイル システム データ (ファイルとフォルダー) のキャッシュへの変更を監視します。
注意 (実装者)
カスタム キャッシュ実装または派生変更モニターの種類を作成する場合は、特定のガイドラインに従う必要があります。 次の一覧は、これらのガイドラインをまとめたものです。 詳細については、個々のメソッドまたはプロパティのドキュメントを参照してください。
派生クラスのコンストラクターは、 プロパティを設定し、監視を UniqueId 開始し、メソッドを呼び出 InitializationComplete() してからメソッドを返す必要があります。 コンストラクターで構築中にエラーが発生し、リソースを破棄する必要がある場合、コンストラクターはメソッドの呼び出し後InitializationComplete()にのみオーバーロードをInvalidOperationException呼び出Disposeすことができます。これは、初期化が完了していない場合にオーバーロードによって例外がスローされるためDisposeです。
初期化が完了する前に監視されているデータに変更が発生した場合、コンストラクターは メソッドを呼び出す前に メソッドをOnChanged(Object)InitializationComplete()呼び出す必要があります。
派生型がインスタンス化された ChangeMonitor 後、モニターをカスタム ObjectCache 実装に挿入する必要があります。 または、変更モニターの使用が完了した場合は、 メソッドを Dispose 呼び出します。
インスタンスを ChangeMonitor 実装に ObjectCache 挿入した後、インスタンスでは ObjectCache 変更モニターを破棄する必要があります。 挿入が無効で例外が発生した場合でも、実装では ObjectCache オーバーロードを呼び出す Dispose 必要があります。
派生変更モニターがキャッシュに挿入された後、実装は オブジェクトを ObjectCache 渡すことによって を呼び出 NotifyOnChanged(OnChangedCallback)す OnChangedCallback 必要があります。 メソッドは NotifyOnChanged(OnChangedCallback) 1 回だけ呼び出すことができます。 依存関係の変更が既に発生している場合は、 OnChangedCallback が呼び出されたときに NotifyOnChanged(OnChangedCallback) インスタンスが直ちに呼び出されます。 それ以外の場合、 OnChangedCallback インスタンスは 1 回だけ呼び出されます。 この 1 回の呼び出しOnChanged(Object)は、インスタンスが変更を検出したためにChangeMonitorメソッドが呼び出されたとき、または でメソッドが呼び出ChangeMonitorされたときに、どちらか早い方Dispose()で発生します。
実装によってObjectCache提供されるインスタンスはOnChangedCallback、関連付けられているキャッシュ エントリを削除し、 列挙を使用して理由を指定するDependencyChanged必要があります。
ChangeMonitorインスタンスは、キャッシュ実装が メソッドをOnChanged(Object)呼び出す前または後に メソッドを呼び出NotifyOnChanged(OnChangedCallback)すことができます。 OnChanged(Object)が呼び出される前に NotifyOnChanged(OnChangedCallback) メソッドが呼び出された場合、基本ChangeMonitor実装は、これが発生したことをキャッシュに通知し、 が呼び出されたときにNotifyOnChanged(OnChangedCallback)すぐにに渡されるコールバックをNotifyOnChanged(OnChangedCallback)トリガーします。 メソッドに OnChanged(Object) 渡されるすべての状態データは、変更モニターによって保存され NotifyOnChanged(OnChangedCallback) 、メソッドの呼び出し時 NotifyOnChanged(OnChangedCallback) にメソッドに渡されます。
変更モニターでは、 メソッドを実装する Dispose(Boolean) 必要があります。 詳細については、Dispose(Boolean) メソッドのドキュメントを参照してください。
インスタンスを Dispose() 破棄するには、メソッドオーバーロードを呼び出す ChangeMonitor 必要があります。 Dispose を呼び出す規則は次のとおりです。
項目がキャッシュに挿入される前に、呼び出し元がインスタンスを破棄する必要があります ChangeMonitor 。
キャッシュ 項目と ChangeMonitor 、それに関連付けられているインスタンスがキャッシュに渡されると、キャッシュ実装者は、挿入が失敗した場合でも、メソッドが呼び出されることを Dispose 確認する必要があります。
項目とそれに関連付けられている ChangeMonitor インスタンスがキャッシュに渡された後、呼び出し元は依存関係を破棄しないでください。これは、メソッドが呼び出されると Dispose 、呼び出しは依存関係が変更されたかのように扱われるためです。 その結果、 OnChanged(Object) メソッドが自動的に呼び出されます。
これらの規則を考慮に入れて、 メソッドは Dispose 次のいずれかの方法で呼び出す必要があります。
派生した変更モニター インスタンスを Dispose() キャッシュに挿入しない場合、ユーザーはメソッド オーバーロードを呼び出す必要があります。
実装が変更モニター インスタンスをオブジェクト キャッシュに挿入しようとしても挿入が失敗した場合、キャッシュ実装はオーバーロードを呼び出す役割を Dispose() 担います。 挿入試行によって例外が発生した場合、キャッシュ実装では、関連付けられている依存関係を破棄する必要があります。
キャッシュ エントリが削除された場合は、キャッシュ実装でも依存関係を破棄する必要があります。
メソッドのOnChanged(Object)内部実装では、 を使用してNotifyOnChanged(OnChangedCallback)登録されたコールバックをDispose呼び出した後、メソッドが自動的に呼び出されます。
注: イベントの発生中に dispose メソッドに対するこの自動呼び出しは、インスタンスの ChangeMonitor 初期化が以前に完了した場合にのみ発生します。
派生変更モニターのコンストラクターが メソッドを InitializationComplete() 呼び出すときに、変更モニターの状態が既に変更されている場合 (つまり、コンストラクターがまだアクティブだったときに監視されている状態が既に変更されている) 場合 InitializationComplete() 、メソッドは変更モニターを自動的に破棄します。
-
HasChangedオブジェクトがメソッドの
true
呼び出しによって設定されているかどうかに関係なくOnChangedCallback、派生した変更モニター インスタンスによってメソッドが呼び出された後OnChanged(Object)、 プロパティは にNotifyOnChanged(OnChangedCallback)設定されます。
コンストラクター
ChangeMonitor() |
ChangeMonitor クラスの新しいインスタンスを初期化します。 このコンストラクターは、派生クラスのコンストラクターから呼び出されて基本クラスを初期化します。 |
プロパティ
HasChanged |
ChangeMonitor クラスによって監視されている状態が変更されたことを示す値を取得します。 |
IsDisposed |
ChangeMonitor クラスの派生インスタンスが破棄されたことを示す値を取得します。 |
UniqueId |
ChangeMonitor クラスのインスタンスを表す値を取得します。 |
メソッド
Dispose() |
ChangeMonitor クラスの現在のインスタンスによって使用されているすべてのリソースを解放します。 |
Dispose(Boolean) |
すべてのマネージド リソースおよびアンマネージド リソースと、ChangeMonitor インスタンスへのすべての参照を解放します。 このオーバーロードは、変更監視クラスの派生クラスで実装する必要があります。 |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
InitializationComplete() |
派生クラスのコンストラクターから呼び出され、初期化が完了したことを示します。 |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
NotifyOnChanged(OnChangedCallback) |
コールバックを登録し、依存関係が変化したときに ObjectCache デリゲートを通して OnChangedCallback インスタンスに通知するために、キャッシュの実装側によって呼び出されます。 |
OnChanged(Object) |
依存関係が変更されたときに、イベントを発生させるために派生クラスによって呼び出されます。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
適用対象
スレッド セーフ
この型はスレッド セーフです。
こちらもご覧ください
.NET