.NET Framework アプリケーションでのキャッシュ

キャッシュを使用すると、メモリにデータを格納して高速にアクセスできます。 アプリケーションからそのデータに再アクセスするときに、元のソースからではなく、キャッシュからデータを取得できます。 そのため、パフォーマンスとスケーラビリティが向上します。 また、データ ソースが一時的に使用できない場合でも、キャッシュのデータを使用できます。

.NET Framework には、Windows クライアントおよびサーバー アプリケーション (ASP.NET など) のパフォーマンスとスケーラビリティの改善に使用できるキャッシュ機能があります。

Note

.NET Framework 3.5 以前のバージョンでは、ASP.NET は System.Web.Caching 名前空間内でメモリ内キャッシュ実装を提供していました。 .NET Framework の以前のバージョンでは、キャッシュは System.Web 名前空間でのみ使用可能だったため、ASP.NET クラスへの依存が必要でした。 .NET Framework 4 では、Web アプリケーションと非 Web アプリケーション両方のために設計された API が System.Runtime.Caching 名前空間に含まれています。

キャッシュされたデータ

情報をキャッシュするには、System.Runtime.Caching 名前空間のクラスを使用します。 この名前空間のキャッシュ クラスには、次の機能があります。

  • カスタムのキャッシュ実装を作成するための基礎として機能する抽象型。

  • 具体的なメモリ内オブジェクト キャッシュ実装。

抽象的な基本キャッシュ クラス (ObjectCache) では、次のキャッシュ タスクを定義します。

  • キャッシュ エントリの作成と管理

  • 有効期限と削除の情報を指定します。

  • キャッシュ エントリの変化に応答して発生するイベントをトリガーします。

MemoryCache クラスは、ObjectCache クラスのメモリ内オブジェクト キャッシュ実装です。 ほとんどのキャッシュ タスクに MemoryCache クラスを使用できます。

Note

MemoryCache クラスは、System.Web.Caching 名前空間に定義されている ASP.NET キャッシュ オブジェクトに対してモデル化されています。 そのため、内部のキャッシュ ロジックは、旧バージョンの ASP.NET で提供されていたロジックと似ています。

WPF アプリケーションでキャッシュに使用する方法の例については、「Walkthrough: Caching Application Data in a WPF Application」(チュートリアル: WPF アプリケーション内のアプリケーション データのキャッシュ) を参照してください。

ASP.NET アプリケーションでのキャッシュ

System.Runtime.Caching 名前空間のキャッシュ クラスには、ASP.NET のデータをキャッシュするための機能があります。

Note

アプリケーションが .NET Framework 3.5 以前をターゲットとしている場合は、System.Web.Caching 名前空間で定義されているキャッシュ クラスを使用する必要があります。 詳細については、「ASP.NET のキャッシュの概要」を参照してください。

Note

新しいアプリケーションを開発する場合は、MemoryCache クラスを使用することをお勧めします。 System.Runtime.Caching 名前空間に用意されている API は、Cache 名前空間に用意されている API と似ています。 そのため、旧バージョンの ASP.NET でキャッシュを使用していた場合は、なじみやすい API です。 ASP.NET アプリケーションでキャッシュを使用する方法の例については、「チュートリアル: ASP.NET 内のアプリケーション データのキャッシュ」を参照してください。

出力キャッシュ

アプリケーション データを手動でキャッシュするには、ASP.NET で MemoryCache クラスを使用します。 ASP.NET は出力キャッシュもサポートしており、ページ、コントロール、および HTTP 応答の生成された出力をメモリに格納します。 出力キャッシュを構成するには、ASP.NET Web ページで宣言を使用するか、Web.config ファイルの設定を使用します。 詳細については、「outputCache Element for caching (ASP.NET Settings Schema)」(caching の outputCache 要素 (ASP.NET 設定スキーマ)) を参照してください。

ASP.NET では、カスタム出力キャッシュ プロバイダーを作成して、出力キャッシュを拡張できます。 カスタム プロバイダーを使用すると、キャッシュされたコンテンツを、ディスク、クラウド記憶域、分散キャッシュ エンジンなど、他の記憶域デバイスに格納できます。 カスタム出力キャッシュ プロバイダーを作成するには、OutputCacheProvider クラスから派生したクラスを作成し、そのカスタム出力キャッシュ プロバイダーを使用するようにアプリケーションを構成します。

WCF REST サービスでのキャッシュ

WCF REST サービスで .NET Framework を使用すると、ASP.NET で使用可能な宣言型の出力キャッシュを利用できます。 このため、WCF REST サービス操作からの応答をキャッシュできます。 キャッシュ用に構成されているサービスに対してユーザーが HTTP GET 要求を送信すると、ASP.NET は、キャッシュされた応答を送り返し、サービス メソッドは呼び出されません。 キャッシュの有効期限が切れると、ユーザーが次回に HTTP GET 要求を送信したときに、サービス メソッドが呼び出され、応答が再度キャッシュされます。

.NET Framework では、条件付き HTTP GET キャッシュを実装することもできます。 REST シナリオでは、条件付き HTTP GET 要求がサービスで使用されて、HTTP の仕様で説明されているように、インテリジェントな HTTP キャッシュが実装されることがよくあります。 詳細については、「WCF WEB HTTP サービスのキャッシュ サポート」を参照してください。

.NET Framework のキャッシュを拡張する

.NET Framework のキャッシュは拡張できるように設計されています。 ObjectCache クラスを使用すると、カスタム キャッシュ実装を作成できます。 このクラスには、Windows フォーム、Windows Presentation Foundation(WPF)、Windows Communication Foundation (WCF) など、すべてのマネージド アプリケーションから使用できるメンバーがあります。 その目的は、異なる記憶域メカニズムを使用するキャッシュ クラスを作成するためや、キャッシュ操作をより細かく制御する場合などです。

キャッシュを拡張するには、次の方法があります。

  • ObjectCache クラスから派生したカスタム クラスを作成し、派生クラスでカスタム キャッシュ実装を提供します。

  • MemoryCache クラスから派生したクラスを作成し、派生クラスをカスタマイズまたは拡張します。 この実行方法の例については、「Caching Application Data by Using Multiple Cache Objects in an ASP.NET Application」(ASP.NET アプリケーションで複数のキャッシュ オブジェクトを使用してアプリケーション データをキャッシュする) を参照してください。

  • OutputCacheProvider クラスから派生したクラスを作成し、そのカスタム出力キャッシュ プロバイダーを使用するようにアプリケーションを構成します。

詳細については、Scott Guthrie のブログのエントリ「Extensible Output Caching with ASP.NET 4 (VS 2010 and .NET Framework 4.0 Series)」(ASP.NET 4 を使用した拡張可能な出力キャッシュ (VS 2010 および .NET Framework 4.0 シリーズ)) を参照してください。

関連項目