ASP.NET のキャッシュの概要

更新 : 2007 年 11 月

多くの場合、アプリケーションは作成するための処理時間を必要とし、頻繁にアクセスされるデータをメモリに格納することによってパフォーマンスを向上できます。たとえば、アプリケーションが複雑なロジックを使用して大量のデータを処理し、ユーザーが頻繁にアクセスするレポートとして返す場合、ユーザーが要求するたびにレポートを再作成することを避けるのが効率的です。同様に、複雑なデータを処理するアプリケーションのページの更新の頻度がそれほど高くない場合、要求があるたびにサーバーがこのページを再作成するのはあまり効率的ではありません。

このような状況でアプリケーションのパフォーマンスを向上するために、ASP.NET は 2 つの基本的なキャッシュ機構を提供します。最初のキャッシュはアプリケーション キャッシュで、作成された DataSet、カスタム レポートのビジネス オブジェクトなどのデータをキャッシュします。2 番目のキャッシュはページ出力キャッシュで、ページを処理した出力をキャッシュに保存し、ユーザーが再びページを要求したときにページを再処理する代わりにキャッシュに保存した出力を再利用します。

アプリケーション キャッシュ

アプリケーション キャッシュは、キーと値のペアを使用してデータをプログラムによってメモリに格納する方法を提供します。アプリケーション キャッシュは、アプリケーション状態と同じように使用できます。ただし、アプリケーション状態とは異なり、アプリケーション キャッシュのデータは揮発性のため、アプリケーションの存続期間をとおしてメモリに保持されるわけではありません。アプリケーション キャッシュを使用する利点は、ASP.NET がキャッシュを管理し、キャッシュ項目が無効になるか、メモリが不足すると項目を削除できることです。アプリケーション キャッシュを構成して、項目が削除されたときにアプリケーションに通知することもできます。詳細については、「アプリケーション データのキャッシュ」を参照してください。

アプリケーション キャッシュの使用パターンは、項目にアクセスするときにキャッシュに項目が存在するかどうかを確認し、存在する場合はそれを使用することです。項目が存在しない場合はそれを再作成してキャッシュに戻します。この使用パターンによって、キャッシュには常に最新のデータが保持されます。

詳細については、「方法 : キャッシュされたアイテムから値を取得する」を参照してください。

ページ出力キャッシュ

ページ出力キャッシュは、処理された ASP.NET ページのコンテンツをメモリに格納します。これによって、ASP.NET はページ処理のライフ サイクルを繰り返すことなく、ページの応答をクライアントに送信できます。ページ出力キャッシュは、更新頻度が低く、作成に手間がかかるページに適しています。たとえば、頻繁にアクセスされる Web ページに更新頻度が低いデータが表示される場合、ページ出力キャッシュによってパフォーマンスが大いに向上します。ページ出力キャッシュはページごとに構成するか、Web.config ファイルにキャッシュ プロファイルを作成できます。プロファイルを作成すると、キャッシュを一度定義するだけで、複数のページが設定を共有できます。

ページ出力キャッシュには、フルページ キャッシュと部分ページ キャッシュの 2 つのモデルがあります。フルページ キャッシュでは、クライアントの要求を満たすためにページのすべてのコンテンツがメモリに保持されます。部分ページ キャッシュでは、ページの一部がキャッシュされ、他の部分は動的になります。詳細については、「ASP.NET ページのキャッシュ」を参照してください。

部分ページ キャッシュには、コントロール キャッシュとキャッシュ後の置換の 2 つの方法があります。フラグメント キャッシュとも呼ばれるコントロール キャッシュでは、ユーザー コントロールに情報を追加し、ユーザー コントロールにキャッシュ可能のマークを付けることによってページ出力の一部をキャッシュします。これによってページの特定の内容がキャッシュされ、ページ全体はキャッシュされないため、要求があるたびにページが再作成されます。たとえば、株式情報などの非常に動的な内容と週間情報などの静的なセクションが含まれるページを作成する場合は、静的なセクションをユーザー コントロールに配置してキャッシュします。

キャッシュ後の置換は、コントロール キャッシュとは対照的です。ページは全体がキャッシュされますが、ページ内のフラグメントは動的になります。たとえば、指定された期間静的なページを作成する場合は、ページ全体をキャッシュします。ユーザー名を表示するページに Label コントロールを追加すると、Label コントロールはページのリフレッシュおよびユーザーごとに同じになり、キャッシュされる前にそのページを要求したユーザーの名前を表示します。ただし、キャッシュ後の置換では、ページをキャッシュするように構成しますが、ページの特定のセクションをキャッシュ不能としてマークします。この場合、Label コントロールをキャッシュ不能セクションにすると、このコントロールは各ユーザーおよびページが要求されるたびに動的に作成されます。詳細については、「ASP.NET ページの一部だけのキャッシュ」を参照してください。

要求パラメータに基づいたページのキャッシュ

ASP.NET のページ出力キャッシュには、ページの個々のバージョンをキャッシュするだけでなく、要求パラメータによってページの複数のバージョンを作成する機能があります。詳細については、「ページの複数バージョンのキャッシュ」を参照してください。

自動データ削除

ASP.NET は、次のいずれかの理由によって、キャッシュからデータを削除します。

  • サーバーのメモリが不足し、清掃プロセスが実行される場合。

  • キャッシュの項目が期限切れになった場合。

  • 項目の依存関係が変更された場合。

ASP.NET は、キャッシュ項目を管理するために、項目がキャッシュから削除されたときにアプリケーションに通知を送ることができます。

清掃

清掃は、メモリが不足したときにキャッシュから項目を削除するプロセスです。一定時間アクセスされていない項目、またはキャッシュに追加されたときに低い優先順位でマークされている項目は削除されます。ASP.NET は、CacheItemPriority オブジェクトを使用して、清掃する項目の順位を決定します。詳細については、「方法 : キャッシュにアイテムを追加する」を参照してください。

有効期限

清掃に加えて、ASP.NET は期間切れになった項目をキャッシュから自動的に削除します。キャッシュに項目を追加するときは、次の表に示す方法で有効期限を設定できます。

有効期限の種類

説明

スライド式有効期限

項目がアクセスされてから期限切れになるまでの期間を指定します。たとえば、キャッシュで項目がアクセスされてから 20 分後に期限切れになるように設定できます。

絶対有効期限

アクセスの頻度に関係なく、項目が設定した時刻に期限切れになるように指定します。たとえば、項目が午後 6 時または 4 時間後に期限切れになるように設定できます。

依存関係

キャッシュ内の項目の有効期限は、ファイル、データベースなどの他のアプリケーション要素に依存するように構成できます。キャッシュ項目が依存する要素が変更されると、ASP.NET は項目をキャッシュから削除します。たとえば、アプリケーションが XML ファイルから作成するレポートを Web サイトに表示する場合は、レポートをキャッシュに格納し、XML ファイルに対する依存関係を構成します。XML ファイルが変更されると、ASP.NET はレポートをキャッシュから削除します。コードでレポートを要求するときは、まずレポートがキャッシュにあるかどうかを確認し、キャッシュにない場合は再作成します。これによって、常にレポートの最新バージョンを使用できます。

ASP.NET のキャッシュは、次の表に示す依存関係をサポートします。

[依存関係]

説明

キーの依存関係

アプリケーション キャッシュの項目は、キーと値のペアで格納されています。キーの依存関係では、アプリケーション キャッシュの項目を別の項目のキーに依存させることができます。元の項目が削除されると、キーの依存関係がある項目も削除されます。たとえば、ReportsValid というキャッシュ項目を追加してから、ReportsValid キーに依存するいくつかのレポートをキャッシュするとします。ReportsValid 項目が削除されると、依存するすべてのレポートもキャッシュから削除されます。

ファイルの依存関係

キャッシュ内の項目は外部のファイルに依存しています。ファイルが変更または削除されると、キャッシュ内の項目は削除されます。

SQL の依存関係

キャッシュ内の項目は、Microsoft SQL Server 2005、SQL Server 2000、または SQL Server 7.0 データベースのテーブルの変更に依存しています。SQL Server 2005 では、テーブルの特定の行に項目が依存する場合があります。詳細については、「SqlCacheDependency クラスによる ASP.NET のキャッシュ」を参照してください。

集計の依存関係

キャッシュ内の項目は、AggregateCacheDependency クラスを使用して複数の要素に依存しています。いずれかの依存関係が変更されると、項目はキャッシュから削除されます。

カスタムの依存関係

キャッシュ内の項目は、コードで作成した依存関係によって構成されています。たとえば、Web サービスへの呼び出しが一定の値を返したときに、キャッシュからデータを削除するカスタム Web サービス キャッシュの依存関係を作成できます。

アプリケーション キャッシュの項目の削除通知

アプリケーション キャッシュから項目が削除されるときに通知を受け取ることができます。たとえば、作成にかなりの処理時間を要する項目がある場合、キャッシュから削除されたときに即座に再配置できるように通知を受け取ることができます。これによって、次回ユーザーが項目を要求したときに、処理されるまで待機する必要がなくなります。詳細については、「方法 : キャッシュから項目が削除されたときにアプリケーションに通知する」を参照してください。

参照

処理手順

方法 : ファイルの依存関係によるページ出力のキャッシュ

概念

ASP.NET ページのキャッシュ

アプリケーション データのキャッシュ

SqlCacheDependency クラスによる ASP.NET のキャッシュ