次の方法で共有


ChangeMonitor クラス

定義

キャッシュ項目が依存するデータの状態の変化を監視する派生カスタム型の基本クラスを提供します。

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() メソッドを呼び出す必要があります。 コンストラクターが構築中にエラーを検出し、リソースを破棄する必要がある場合、Dispose オーバーロードは初期化が完了していない場合にInvalidOperationException例外をスローするため、InitializationComplete() メソッドが呼び出された後にのみ、Dispose オーバーロードを呼び出すことができます。

  • 初期化が完了する前に監視されているデータに変更が発生した場合、コンストラクターは、InitializationComplete() メソッドを呼び出す前に OnChanged(Object) メソッドを呼び出す必要があります。

  • 派生 ChangeMonitor 型がインスタンス化された後、カスタム ObjectCache 実装にモニターを挿入する必要があります。 または、変更モニターの使用が完了した場合は、 Dispose メソッドを呼び出します。

  • ChangeMonitor インスタンスをObjectCache実装に挿入した後、ObjectCache インスタンスは変更モニターを破棄する必要があります。 挿入が無効で例外が発生した場合でも、 ObjectCache 実装は Dispose オーバーロードを呼び出す必要があります。

  • 派生変更モニターがキャッシュに挿入された後、ObjectCache実装は、OnChangedCallback オブジェクトを渡すことによって、NotifyOnChanged(OnChangedCallback)を呼び出す必要があります。 NotifyOnChanged(OnChangedCallback) メソッドは 1 回だけ呼び出すことができます。 依存関係の変更が既に発生している場合、NotifyOnChanged(OnChangedCallback)が呼び出されると、OnChangedCallback インスタンスが直ちに呼び出されます。 それ以外の場合、 OnChangedCallback インスタンスは 1 回だけ呼び出されます。 この 1 回の呼び出しは、ChangeMonitor インスタンスが変更を検出したためにOnChanged(Object) メソッドが呼び出されたとき、または Dispose() メソッドがChangeMonitorで呼び出されたときに発生します。どちらか早い方が発生します。

  • ObjectCache実装によって提供されるOnChangedCallback インスタンスは、関連付けられているキャッシュ エントリを削除し、DependencyChanged列挙を使用して理由を指定する必要があります。

  • ChangeMonitor インスタンスは、キャッシュ実装が NotifyOnChanged(OnChangedCallback) メソッドを呼び出す前または後に、OnChanged(Object) メソッドを呼び出すことができます。 NotifyOnChanged(OnChangedCallback)が呼び出される前に OnChanged(Object) メソッドが呼び出された場合、基本ChangeMonitor実装は、これが発生したことをキャッシュに通知し、NotifyOnChanged(OnChangedCallback)が呼び出されたときにすぐにコールバックがNotifyOnChanged(OnChangedCallback)に渡されるようにトリガーします。 OnChanged(Object) メソッドに渡されるすべての状態データは、変更モニターによって保存され、その後、NotifyOnChanged(OnChangedCallback) メソッドが呼び出されたときにNotifyOnChanged(OnChangedCallback) メソッドに渡されます。

  • 変更モニターは、 Dispose(Boolean) メソッドを実装する必要があります。 詳細については、 Dispose(Boolean) メソッドのドキュメントを参照してください。

  • ChangeMonitor インスタンスを破棄するには、Dispose() メソッドのオーバーロードを呼び出す必要があります。 Dispose を呼び出す規則は次のとおりです。

    • 項目がキャッシュに挿入される前に、呼び出し元が ChangeMonitor インスタンスを破棄する必要があります。

    • キャッシュ 項目と、それに関連付けられている ChangeMonitor インスタンスがキャッシュに渡されると、キャッシュ実装者は、挿入が失敗した場合でも、 Dispose メソッドが呼び出されることを確認する必要があります。

    • 項目とそれに関連付けられている ChangeMonitor インスタンスがキャッシュに渡された後、呼び出し元は依存関係を破棄しないでください。これは、 Dispose メソッドが呼び出されると、依存関係が変更されたかのように呼び出しが処理されるためです。 その結果、 OnChanged(Object) メソッドが自動的に呼び出されます。

  • これらの規則を考慮に入れて、 Dispose メソッドは次のいずれかの方法で呼び出す必要があります。

    • ユーザーは、派生した変更モニター インスタンスをキャッシュに挿入しない場合は、 Dispose() メソッドのオーバーロードを呼び出す必要があります。

    • 実装が変更モニター インスタンスをオブジェクト キャッシュに挿入しようとしても挿入が失敗した場合、キャッシュの実装は Dispose() オーバーロードを呼び出す役割を担います。 挿入の試行で例外が発生した場合、キャッシュの実装では、関連付けられている依存関係を破棄する必要があります。

    • キャッシュ エントリが削除された場合、キャッシュ実装では依存関係も破棄する必要があります。

    • OnChanged(Object) メソッドの内部実装は、NotifyOnChanged(OnChangedCallback)によって登録されたコールバックを呼び出した後、Dispose メソッドを自動的に呼び出します。

注: イベントの発生中に dispose メソッドへのこの自動呼び出しは、 ChangeMonitor インスタンスの初期化が以前に完了した場合にのみ発生します。

派生変更モニターのコンストラクターが InitializationComplete() メソッドを呼び出すときに、変更モニターの状態が既に変更されている場合 (つまり、コンストラクターがまだアクティブだったときに監視されている状態が既に変更されている) 場合、 InitializationComplete() メソッドは変更モニターを自動的に破棄します。

コンストラクター

名前 説明
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 インスタンスに通知するために、Cache 実装者によって呼び出されます。

OnChanged(Object)

依存関係が変更されたときにイベントを発生させるために、派生クラスによって呼び出されます。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

スレッド セーフ

この型はスレッド セーフです。

こちらもご覧ください