
今日のキャッシングメカニズム
ASP.NET 1.0は結果のキャッシュの概念を導入しました。これにより、開発者は生成されたページ、コントロール、コントローラー、およびHTTP応答をキャプチャしてキャッシュメモリに保存できました。 それ以降のすべてのWeb要求の間、ASP.NETは、ページまたはコントローラーを起動して結果を生成することなく、キャッシュから完成したデータを返すことにより、コンテンツをより高速に配信できます。 これにより、特にデータがデータベースに保存されている場合に、アプリケーションのパフォーマンスを大幅に向上できます(キャッシュ後、ページにアクセスするたびにデータベースクエリを実行する必要がなくなります)。
ASP.NETのキャッシュメカニズムは、ページまたはコントローラーに渡されるGET / POSTパラメーターに応じて、たとえばBrowse.aspx?Category = BeveragesとBrowse.aspx?Category = Meat-異なるキャッシュデータに応じて、異種データを格納するのに十分な柔軟性を備えています。 また、ブラウザの種類とユーザーの言語設定に基づいて、異なるバージョンの結果をキャッシュすることもできます。 これにより、デスクトップブラウザーバージョンとは別に、モバイルバージョンのページをキャッシュできます。また、英語またはフランス語でページを読むためのユーザー設定に基づいてキャッシュデータを変更できます。 特定の期間、個々のパーツをキャッシュするようにASP.NETを構成できます。 たとえば、1分間、クエリは結果を再生成し、再度キャッシュします。 また、ASP.NETに外部イベントによってキャッシュの一部を動的に無効にすることもできます。たとえば、データベース内でキャッシュの基になっているデータが変更された場合などです。
ASP.NET 4より前は、キャッシュメカニズムに1つの制限がありました。これは、キャッシュがそれ自体を拡張できず、キャッシュされたコンテンツを常にメモリに格納する必要があることでした。
ASP.NET 4のキャッシュメカニズムの拡張性。
ASP.NET 4は、キャッシュメカニズムに拡張性を追加し、開発者が1つ以上のネイティブキャッシュプロバイダーを構成できるようにします。 キャッシュプロバイダーはさまざまなストレージメカニズムを使用できます。 これにより、ローカルまたはリモートディスク、データベース、クラウドストレージ、一般的なキャッシュエンジン(memcachedまたは速度)などのストレージメカニズムを使用して、キャッシュにデータを保存するキャッシュプロバイダーを作成できます。
ASP.NET 4に登場した新しいSystem.Web.Caching.OutputCacheProviderクラスから継承するクラスを追加することにより、キャッシュプロバイダーを作成できます。宣言されたクラスでは、追加/削除/変更の実装を担当する4つのパブリックメソッドをオーバーロードする必要があります/キャッシュされたコンテンツを返します(キーはキャッシュ要素を見つけるために使用されます)。 新しい<outputCache>サブセクション<providers>のweb.configに登録することにより、独自のキャッシュプロバイダーを使用するようにASP.NET 4を構成できます。

上記では、「SampleCache」と呼ばれる新しいキャッシュプロバイダーを追加しました。これは、OutputCacheSample.dllアセンブリの「ScottOutputCache」クラスを使用して実装されます。 また、ASP.NETに、<outputCache>要素で「defaultProvider」属性を指定して、「SampleCache」をデフォルトのキャッシュメカニズムとして使用するように依頼しました。
そして、OutputCacheディレクティブを.aspxファイルのヘッダーに追加すると、ScottOutputCacheプロバイダーを使用してページのコンテンツがキャッシュおよび保存されます。

さらに、[OutputCache]属性をASP.NET MVCのアクションメソッドに追加すると、ScottOutputCacheプロバイダーを使用してコンテンツもキャッシュおよび保存されます。

使用されるキャッシュプロバイダー
その前に、ASP.NETを構成して、アプリケーションでキャッシュが使用されている場合は常にデフォルトで常にSampleCacheプロバイダーを使用するようにしました。
さらに、開発者はリクエストごとに動的キャッシュプロバイダーを設定できます。 これは、より豊富なキャッシュセマンティクスのセットが必要なシナリオに便利です。 たとえば、Webサイトのホームページまたはトップ10ページをキャッシュし、ASP.NETインメモリプロバイダーのビルトインを使用します。これは、データをRAMに保存することにより超高速で、要求の少ないページをディスクにキャッシュします。
Global.asaxファイルのGetOutputCacheProviderName()メソッドをオーバーライドすることにより、各リクエストに使用するキャッシュプロバイダーを動的に決定できます。 以下では、web.configファイルにインストールされているキャッシュプロバイダーに関係なく、 "Home.aspx"で組み込みのインメモリASP.NETキャッシュプロバイダーを使用することを示します。

この機能により、ニーズに応じてプロバイダーを切り替えることができ、強力なシナリオを実装できます。
共通キャッシュプロバイダー
ファイルシステムのキャッシュデータのストレージを使用するキャッシュプロバイダーを実装する方法を示す例を示します。 また、Velocityとして知られる新しいWindows Server AppFabric Caching Serviceとキャッシングを統合する方法を示す例を提供します。 AppFabric Caching Serviceは、Microsoftの完全にサポートされた無料のキャッシュシステムです。 ASP.NET 4では、一般的なオープンソースキャッシュシステムであるmemcachedの拡張メカニズムを簡単に使用できます。
Stefan ShakowのビデオをPDC-ASP.NET 4 Core Runtimeで見ると、プロバイダーの作成の原則を理解できます。 また、 PDC 2009でAppFabric Cacheサービスに精通します。
まとめ
ASP.NET 4のキャッシュメカニズムを拡張する機能を追加することにより、開発者はWebサイトおよびアプリケーションに対してより積極的でスマートなキャッシュ戦略を実装できます。 これにより、アプリケーションのパフォーマンスと応答が大幅に向上し、サーバーに必要なリソースの量を削減できます。