次の方法で共有


キャッシュ

作成者: Microsoft

パフォーマンスの高い ASP.NET アプリケーションでは、キャッシュの理解が重要です。 ASP.NET 1.x には、キャッシュ用の 3 つの異なるオプションが用意されています。出力キャッシュ、フラグメント キャッシュ、キャッシュ API。

パフォーマンスの高い ASP.NET アプリケーションでは、キャッシュの理解が重要です。 ASP.NET 1.x には、キャッシュ用の 3 つの異なるオプションが用意されています。出力キャッシュ、フラグメント キャッシュ、キャッシュ API。 ASP.NET 2.0 では、これらの 3 つの方法がすべて提供されていますが、いくつかの重要な機能が追加されています。 いくつかの新しいキャッシュ依存関係があり、開発者はカスタム キャッシュの依存関係も作成できるようになりました。 キャッシュの構成も、ASP.NET 2.0 で大幅に改善されました。

新機能

キャッシュ プロファイル

キャッシュ プロファイルを使用すると、開発者は個々のページに適用できる特定のキャッシュ設定を定義できます。 たとえば、12 時間後にキャッシュから期限切れになるページがある場合は、それらのページに適用できるキャッシュ プロファイルを簡単に作成できます。 新しいキャッシュ プロファイルを追加するには、構成ファイルの <outputCacheSettings> セクションを使用します。 たとえば、12 時間のキャッシュ期間を構成する twoday というキャッシュ プロファイルの構成を次に示します。

<outputCacheSettings>
    <outputCacheProfiles>
        <add name="TwoDay" duration="43200" />
    </outputCacheProfiles>
</outputCacheSettings>

このキャッシュ プロファイルを特定のページに適用するには、次に示すように、 @ OutputCache ディレクティブの CacheProfile 属性を使用します。

<%@ OutputCache CacheProfile="TwoDay" %>

カスタム キャッシュの依存関係

ASP.NET 1.x 開発者は、カスタム キャッシュの依存関係について叫びました。 ASP.NET 1.x では、CacheDependency クラスがシールされているため、開発者はそこから独自のクラスを派生することができなくなります。 ASP.NET 2.0 では、その制限は削除され、開発者は独自のカスタム キャッシュ依存関係を自由に開発できます。 CacheDependency クラスを使用すると、ファイル、ディレクトリ、またはキャッシュ キーに基づいてカスタム キャッシュ依存関係を作成できます。

たとえば、次のコードは、Web アプリケーションのルートにある stuff.xml というファイルに基づいて、新しいカスタム キャッシュ依存関係を作成します。

System.Web.Caching.CacheDependency dep = new
    System.Web.Caching.CacheDependency(Server.MapPath("stuff.xml"));
Response.AddCacheDependency(dep);
Cache.Insert("key", "value");

このシナリオでは、stuff.xml ファイルが変更されると、キャッシュされた項目は無効になります。

キャッシュ キーを使用してカスタム キャッシュ依存関係を作成することもできます。 このメソッドを使用すると、キャッシュ キーを削除すると、キャッシュされたデータが無効になります。 次の例を使って説明します。

// insert a value into cache that will serve
// as the cache key
Cache["CacheKey"] = "something";

// create an array of cache keys
string[] keys = new String[1];
keys[0] = "CacheKey";

CacheDependency dep = new CacheDependency(null, keys);

// insert an item into cache with a dependency on
// the above CacheDependency
Cache.Insert("Key", "Value", dep);

上に挿入された項目を無効にするには、キャッシュに挿入された項目を削除してキャッシュ キーとして機能します。

// Remove the cache item that serves as the cache key
Cache.Remove("CacheKey");

キャッシュ キーとして機能する項目のキーは、キャッシュ キーの配列に追加される値と同じである必要があることに注意してください。

Polling-Based SQL キャッシュの依存関係 (Table-Based依存関係とも呼ばれます)

SQL Server 7 と 2000 では、SQL キャッシュの依存関係にポーリング ベースのモデルを使用します。 ポーリング ベースのモデルでは、テーブル内のデータが変更されたときにトリガーされるデータベース テーブルに対してトリガーが使用されます。 このトリガーによって、通知テーブルの changeId フィールドが更新され、定期的にチェック ASP.NET。 changeId フィールドが更新された場合、ASP.NET データが変更されたことが認識され、キャッシュされたデータが無効になります。

Note

SQL Server 2005 ではポーリング ベースのモデルを使用することもできますが、ポーリング ベースのモデルは最も効率的なモデルではないので、SQL Server 2005 でクエリ ベースのモデル (後述) を使用することをお勧めします。

ポーリング ベースのモデルを使用する SQL キャッシュの依存関係が正しく機能するためには、テーブルで通知が有効になっている必要があります。 これは、SqlCacheDependencyAdmin クラスを使用するか、aspnet_regsql.exe ユーティリティを使用してプログラムで実行できます。

次のコマンド ラインは、SQL キャッシュ依存関係の dbase という名前のSQL Server インスタンスにある Northwind データベースに Products テーブルを登録します。

aspnet_regsql -S dbase -ed -d Northwind -E -et -t Products

上記のコマンドで使用されるコマンド ライン スイッチの説明を次に示します。

コマンド ライン スイッチ 目的
-S server サーバー名を指定します。
-編 SQL キャッシュの依存関係に対してデータベースを有効にすることを指定します。
-d database_name SQL キャッシュの依存関係に対して有効にする必要があるデータベース名を指定します。
-E データベースに接続するときにaspnet_regsqlがWindows 認証を使用するように指定します。
-Et SQL キャッシュ依存関係のデータベース テーブルを有効にすることを指定します。
-t table_name SQL キャッシュの依存関係を有効にするデータベース テーブルの名前を指定します。

Note

aspnet_regsql.exeに使用できるスイッチは他にもあります。 完全な一覧については、aspnet_regsql.exeを実行します。 コマンド ラインから。

このコマンドを実行すると、SQL Server データベースに対して次の変更が行われます。

  • AspNet_SqlCacheTablesForChangeNotification テーブルが追加されます。 このテーブルには、SQL キャッシュ依存関係が有効になっているデータベース内のテーブルごとに 1 つの行が含まれています。
  • データベース内に次のストアド プロシージャが作成されます。
AspNet_SqlCachePollingStoredProcedure AspNet_SqlCacheTablesForChangeNotification テーブルに対してクエリを実行し、SQL キャッシュの依存関係に対して有効になっているすべてのテーブルと、各テーブルの changeId の値を返します。 このストアド プロシージャは、データが変更されたかどうかを判断するためにポーリングに使用されます。
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure AspNet_SqlCacheTablesForChangeNotification テーブルに対してクエリを実行して SQL キャッシュ依存関係が有効になっているすべてのテーブルを返し、SQL キャッシュ依存関係が有効になっているすべてのテーブルを返します。
AspNet_SqlCacheRegisterTableStoredProcedure 通知テーブルに必要なエントリを追加して、SQL キャッシュ依存関係のテーブルを登録し、トリガーを追加します。
AspNet_SqlCacheUnRegisterTableStoredProcedure 通知テーブルのエントリを削除して、SQL キャッシュ依存関係のテーブルの登録を解除し、トリガーを削除します。
AspNet_SqlCacheUpdateChangeIdStoredProcedure 変更されたテーブルの changeId をインクリメントして、通知テーブルを更新します。 ASP.NET では、この値を使用して、データが変更されたかどうかを判断します。 次に示すように、このストアド プロシージャは、テーブルが有効になっているときに作成されたトリガーによって実行されます。
  • テーブルに対して table_name_AspNet_SqlCacheNotification_Trigger というSQL Server トリガーが作成されます。 このトリガーは、テーブルに対して INSERT、UPDATE、または DELETE が実行されたときに、AspNet_SqlCacheUpdateChangeIdStoredProcedureを実行します。
  • aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess と呼ばれるSQL Server ロールがデータベースに追加されます。

aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess SQL Server ロールには、AspNet_SqlCachePollingStoredProcedureに対する EXEC アクセス許可があります。 ポーリング モデルが正しく機能するためには、プロセス アカウントを aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess ロールに追加する必要があります。 aspnet_regsql.exe ツールでは、この操作は行われません。

Polling-Based SQL キャッシュの依存関係の構成

ポーリング ベースの SQL キャッシュ依存関係を構成するために必要な手順がいくつかあります。 最初の手順は、前述のようにデータベースとテーブルを有効にすることです。 その手順が完了すると、構成の残りの部分は次のようになります。

  • ASP.NET 構成ファイルの構成。
  • SqlCacheDependency の構成

ASP.NET 構成ファイルの構成

前のモジュールで説明したように接続文字列を追加するだけでなく、次に示すように、sqlCacheDependency> 要素を<使用してキャッシュ>要素を構成<する必要もあります。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="Pubs"
    connectionString="Data Source=(local);
      Initial Catalog=pubs;Integrated Security=true;"
    providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <caching>
      <sqlCacheDependency enabled = "true" pollTime = "60000" >
        <databases>
          <add name="pubs" connectionStringName = "pubs" pollTime = "9000000" />
        </databases>
      </sqlCacheDependency>
    </caching>
  </system.web>
</configuration>

この構成により、 pubs データベースに対する SQL キャッシュの依存関係が有効になります。 sqlCacheDependency> 要素の <pollTime 属性の既定値は 60000 ミリ秒または 1 分であることに注意してください。 (この値は 500 ミリ秒未満にすることはできません)。この例では、add> 要素によって<新しいデータベースが追加され、pollTime がオーバーライドされ、9000000 ミリ秒に設定されます。

SqlCacheDependency の構成

次の手順では、SqlCacheDependency を構成します。 これを実現する最も簡単な方法は、 @ Outcache ディレクティブで SqlDependency 属性の値を次のように指定することです。

<%@ OutputCache duration="60"
    VaryByParam="none" SqlDependency="pubs:authors" %>

上記の @ OutputCache ディレクティブでは、pubs データベースの authors テーブルに対して SQL キャッシュ依存関係が構成されています。 複数の依存関係は、セミコロンで区切って次のように構成できます。

<%@ OutputCache duration="60"
    VaryByParam="none"
    SqlDependency="database_name:table_name;database_name:table_name" %>

SqlCacheDependency を構成するもう 1 つの方法は、プログラムによって構成することです。 次のコードでは、pubs データベースの authors テーブルに対する新しい SQL キャッシュ依存関係を作成します。

SqlCacheDependency dep = new SqlCacheDependency("pubs", "authors");

SQL キャッシュの依存関係をプログラムで定義する利点の 1 つは、発生する可能性のある例外を処理できることです。 たとえば、通知が有効になっていないデータベースの SQL キャッシュ依存関係を定義しようとすると、 DatabaseNotEnabledForNotificationException 例外がスローされます。 その場合は、 SqlCacheDependencyAdmin.EnableNotifications メソッドを呼び出し、データベース名を渡すことで、通知のためにデータベースを有効にすることができます。

同様に、通知が有効になっていないテーブルの SQL キャッシュ依存関係を定義しようとすると、 TableNotEnabledForNotificationException がスローされます。 その後、 SqlCacheDependencyAdmin.EnableTableForNotifications メソッドを呼び出して、データベース名とテーブル名を渡すことができます。

次のコード サンプルは、SQL キャッシュの依存関係を構成するときに例外処理を適切に構成する方法を示しています。

try {
    SqlCacheDependency SqlDep = new
    SqlCacheDependency("pubs", "authors");
} catch (DatabaseNotEnabledForNotificationException exDBDis) {
    try {
        SqlCacheDependencyAdmin.EnableNotifications("pubs");
    } catch (UnauthorizedAccessException exPerm) {
        Response.Redirect("ErrorPage.htm");
    }
} catch (TableNotEnabledForNotificationException exTabDis) {
    try {
        SqlCacheDependencyAdmin.EnableTableForNotifications("pubs",
        "authors");
    } catch (System.Data.SqlClient.SqlException exc) {
        Response.Redirect("ErrorPage.htm");
    }
} finally {
    Cache.Insert("SqlSource", Source1, SqlDep);
}

詳細情報: https://msdn.microsoft.com/library/t9x04ed2.aspx

Query-Based SQL キャッシュの依存関係 (SQL Server 2005 のみ)

SQL キャッシュの依存関係に SQL Server 2005 を使用する場合、ポーリング ベースのモデルは必要ありません。 SQL Server 2005 と共に使用する場合、SQL キャッシュの依存関係は、SQL Server 2005 クエリ通知を使用して、SQL Server インスタンスへの SQL 接続を介して直接通信します (これ以上の構成は必要ありません)。

クエリ ベースの通知を有効にする最も簡単な方法は、データ ソース オブジェクトの SqlCacheDependency 属性を CommandNotification に設定し、 EnableCaching 属性をtrue に設定することで宣言的に行うことです。 このメソッドを使用すると、コードは必要ありません。 データ ソースに対して実行されたコマンドの結果が変更されると、キャッシュ データが無効になります。

次の例では、SQL キャッシュ依存関係のデータ ソース管理を構成します。

<asp:SqlDataSource ID="ProductList" runat="server"
    ConnectionString="<%$ ConnectionStrings:Northwind %>"
    EnableCaching="true"
    SqlCacheDependency="CommandNotification"
    SelectCommand="SELECT * FROM [Products]" />

この場合、 SelectCommand で指定されたクエリが最初とは異なる結果を返した場合、キャッシュされた結果は無効になります。

@ OutputCache ディレクティブの SqlDependency 属性を CommandNotification に設定することで、SQL キャッシュの依存関係に対してすべてのデータ ソースを有効にするように指定することもできます。 次の例は、これを示しています。

<%@ OutputCache SqlDependency="CommandNotification" 
    duration="60" VaryByParam="none" %>

Note

SQL Server 2005 のクエリ通知の詳細については、オンライン ブックのSQL Serverを参照してください。

クエリ ベースの SQL キャッシュ依存関係を構成するもう 1 つの方法は、SqlCacheDependency クラスを使用してプログラムで構成することです。 次のコード サンプルは、これを実現する方法を示しています。

string sql = "SELECT ProductName, ProductID FROM Products";
SqlConnection conn = new
SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlCacheDependency dep = new SqlCacheDependency(cmd);
Response.AddCacheDependency(dep);

詳細情報: https://msdn.microsoft.com/library/default.asp?url=/library/enus/dnvs05/html/querynotification.asp

キャッシュ後の置換

ページをキャッシュすると、Web アプリケーションのパフォーマンスが大幅に向上する可能性があります。 ただし、場合によっては、ほとんどのページをキャッシュし、ページ内の一部のフラグメントを動的にする必要があります。 たとえば、設定された期間にわたって完全に静的なニュース 記事のページを作成する場合は、ページ全体をキャッシュするように設定できます。 すべてのページ要求で変更された回転広告バナーを含める場合は、広告を含むページの部分を動的にする必要があります。 ページをキャッシュし、一部のコンテンツを動的に置き換えるためには、キャッシュ後の置換 ASP.NET 使用できます。 キャッシュ後の置換では、ページ全体が出力キャッシュされ、キャッシュから除外としてマークされた特定の部分が含まれます。 広告バナーの例では、AdRotator コントロールを使用すると、キャッシュ後の置換を利用して、各ユーザーとページの更新ごとに広告を動的に作成できます。

キャッシュ後の置換を実装するには、次の 3 つの方法があります。

  • 代入コントロールを使用して宣言します。
  • プログラムによって、代替コントロール API を使用します。
  • AdRotator コントロールを使用して暗黙的に。

置換コントロール

ASP.NET 置換コントロールは、キャッシュではなく動的に作成されるキャッシュされたページのセクションを指定します。 代替コントロールは、動的コンテンツを表示するページ上の場所に配置します。 実行時に、代替コントロールは、MethodName プロパティで指定したメソッドを呼び出します。 メソッドは文字列を返す必要があります。この文字列は、Replace コントロールの内容を置き換えます。 メソッドは、含まれている Page コントロールまたは UserControl コントロールの静的メソッドである必要があります。 置換コントロールを使用すると、クライアント側のキャッシュ可能性がサーバーのキャッシュ可能性に変更され、ページがクライアントにキャッシュされなくなります。 これにより、ページに対する今後の要求で メソッドが再度呼び出され、動的コンテンツが生成されます。

置換 API

キャッシュされたページの動的コンテンツをプログラムで作成するには、ページ コードで WriteSubstitution メソッドを呼び出し、メソッドの名前をパラメーターとして渡します。 動的コンテンツの作成を処理する メソッドは、1 つの HttpContext パラメーターを受け取り、文字列を返します。 戻り文字列は、指定された場所で置き換えられるコンテンツです。 Substitution コントロールを宣言的に使用する代わりに WriteSubstitution メソッドを呼び出す利点は、Page オブジェクトまたは UserControl オブジェクトの静的メソッドを呼び出すのではなく、任意のオブジェクトのメソッドを呼び出すことができる点です。

WriteSubstitution メソッドを呼び出すと、クライアント側のキャッシュ可能性がサーバーのキャッシュ可能性に変更され、ページがクライアントにキャッシュされなくなります。 これにより、ページに対する今後の要求で メソッドが再度呼び出され、動的コンテンツが生成されます。

AdRotator コントロール

AdRotator サーバー コントロールは、キャッシュ後の置換のサポートを内部的に実装します。 ページに AdRotator コントロールを配置すると、親ページがキャッシュされているかどうかに関係なく、要求ごとに一意のアドバタイズがレンダリングされます。 その結果、AdRotator コントロールを含むページは、サーバー側でのみキャッシュされます。

ControlCachePolicy クラス

ControlCachePolicy クラスを使用すると、ユーザー コントロールを使用してフラグメント キャッシュをプログラムで制御できます。 ASP.NET BasePartialCachingControl インスタンス内にユーザー コントロールを埋め込みます。 BasePartialCachingControl クラスは、出力キャッシュが有効になっているユーザー コントロールを表します。

PartialCachingControl コントロールの BasePartialCachingControl.CachePolicy プロパティにアクセスすると、常に有効な ControlCachePolicy オブジェクトを受け取ります。 ただし、UserControl コントロールの UserControl.CachePolicy プロパティにアクセスする場合は、ユーザー コントロールが BasePartialCachingControl コントロールによって既にラップされている場合にのみ、有効な ControlCachePolicy オブジェクトを受け取ります。 ラップされていない場合、 プロパティによって返される ControlCachePolicy オブジェクトは、BasePartialCachingControl が関連付けられていないため、操作しようとすると例外をスローします。 例外を生成せずに UserControl インスタンスがキャッシュをサポートしているかどうかを確認するには、 SupportsCaching プロパティを 調べます。

ControlCachePolicy クラスの使用は、出力キャッシュを有効にするいくつかの方法の 1 つです。 次の一覧では、出力キャッシュを有効にするために使用できるメソッドについて説明します。

  • 宣言型のシナリオで出力キャッシュを有効にするには、 @ OutputCache ディレクティブを使用します。
  • 分離コード ファイル内のユーザー コントロールのキャッシュを有効にするには、 PartialCachingAttribute 属性を使用します。
  • ControlCachePolicy クラスを使用して、前のいずれかのメソッドを使用してキャッシュが有効になっており、 System.Web.UI.TemplateControl.LoadControl メソッドを使用して動的に読み込まれた BasePartialCachingControl インスタンスを操作するプログラムシナリオでキャッシュ設定を指定します。

ControlCachePolicy インスタンスは、コントロール ライフ サイクルの Init ステージと PreRender ステージの間でのみ正常に操作できます。 PreRender フェーズの後に ControlCachePolicy オブジェクトを変更すると、コントロールのレンダリング後に行われた変更が実際にはキャッシュ設定に影響しないため、ASP.NET は例外をスローします (コントロールは Render ステージ中にキャッシュされます)。 最後に、ユーザー コントロール インスタンス (したがって、その ControlCachePolicy オブジェクト) は、実際にレンダリングされた場合にのみプログラムによる操作に使用できます。

キャッシュ構成の変更 - <caching> 要素

ASP.NET 2.0 のキャッシュ構成にはいくつかの変更があります。 <キャッシュ>要素は、ASP.NET 2.0 の新機能であり、構成ファイルでキャッシュ構成の変更を行うことができます。 以下の属性が利用できます。

要素 説明
cache 省略可能な要素です。 グローバル アプリケーション キャッシュ設定を定義します。
Outputcache 省略可能な要素です。 アプリケーション全体の出力キャッシュ設定を指定します。
outputCacheSettings 省略可能な要素です。 アプリケーション内のページに適用できる出力キャッシュ設定を指定します。
sqlCacheDependency 省略可能な要素です。 ASP.NET アプリケーションの SQL キャッシュ依存関係を構成します。

<cache> 要素

キャッシュ>要素では、次の属性を<使用できます。

属性 説明
disableMemoryCollection オプション の Boolean 属性。 マシンがメモリ不足のときに発生するキャッシュ メモリ コレクションが無効かどうかを示す値を取得または設定します。
disableExpiration オプション の Boolean 属性。 キャッシュの有効期限が無効かどうかを示す値を取得または設定します。 無効にすると、キャッシュされたアイテムは期限切れになりません。また、有効期限が切れたキャッシュ項目のバックグラウンド 清掃は行われません。
privateBytesLimit オプション の Int64 属性。 キャッシュが期限切れの項目のフラッシュを開始し、メモリの再利用を試みる前に、アプリケーションのプライベート バイトの最大サイズを示す値を取得または設定します。 この制限には、キャッシュで使用されるメモリと、実行中のアプリケーションからの通常のメモリ オーバーヘッドの両方が含まれます。 0 の設定は、ASP.NET がメモリの再利用を開始するタイミングを決定するために独自のヒューリスティックを使用することを示します。
percentagePhysicalMemoryUsedLimit オプション の Int32 属性。 キャッシュが期限切れのアイテムのフラッシュを開始し、メモリの再利用を試みる前に、アプリケーションで使用できるマシンの物理メモリの最大割合を示す値を取得または設定します。このメモリ使用量には、キャッシュで使用されるメモリと実行中のアプリケーションの通常のメモリ使用量の両方が含まれます。 0 の設定は、ASP.NET がメモリの再利用を開始するタイミングを決定するために独自のヒューリスティックを使用することを示します。
privateBytesPollTime 省略可能な TimeSpan 属性。 アプリケーションのプライベート バイト メモリ使用量のポーリング間隔を示す値を取得または設定します。

<outputCache> 要素

outputCache> 要素には、次の属性を<使用できます。

属性 説明
enableOutputCache オプション の Boolean 属性。 ページ出力キャッシュを有効または無効にします。 無効にした場合、プログラムまたは宣言型の設定に関係なく、ページはキャッシュされません。 既定値は " [はい] " です。
enableFragmentCache オプション の Boolean 属性。 アプリケーション フラグメント キャッシュを有効または無効にします。 無効にした場合、 @ OutputCache ディレクティブまたはキャッシュ プロファイルに関係なく、ページはキャッシュされません。 アップストリーム プロキシ サーバーとブラウザー クライアントがページ出力をキャッシュしないようにすることを示すキャッシュ制御ヘッダーが含まれています。 既定値は false です。
sendCacheControlHeader オプション の Boolean 属性。 cache-control:private ヘッダーが既定で出力キャッシュ モジュールによって送信されるかどうかを示す値を取得または設定します。 既定値は false です。
omitVaryStar オプション の Boolean 属性。 応答で Http "Vary: </strong>" ヘッダーの送信を有効または無効にします。既定の設定が false の場合、キャッシュされた出力ページに対して "*Vary: *" ヘッダーが送信されます。Vary ヘッダーを送信すると、Vary ヘッダーで指定された内容に基づいて異なるバージョンをキャッシュできます。たとえば、Vary:User-Agents は、要求を発行したユーザー エージェントに基づいて、異なるバージョンのページを格納します。既定値は **false です

<outputCacheSettings> 要素

<outputCacheSettings> 要素を使用すると、前述のようにキャッシュ プロファイルを作成できます。 outputCacheSettings> 要素の唯一の<子要素は、キャッシュ プロファイルを<構成するための outputCacheProfiles> 要素です。

<sqlCacheDependency> 要素

sqlCacheDependency> 要素では、次の属性を<使用できます。

属性 説明
有効 必須 の Boolean 属性。 変更がポーリングされるかどうかを示します。
pollTime オプション の Int32 属性。 SqlCacheDependency がデータベース テーブルの変更をポーリングする頻度を設定します。 この値は、連続するポーリング間のミリ秒数に対応します。 500 ミリ秒未満に設定することはできません。 既定値は 1 分です。

詳細情報

キャッシュの構成に関して注意する必要がある追加情報がいくつかあります。

  • ワーカー プロセスのプライベート バイト数の制限が設定されていない場合、キャッシュでは次のいずれかの制限が使用されます。

    • x86 2GB: 物理 RAM の 800 MB または 60% のいずれか小さい方
    • x86 3GB: 物理 RAM の 1800 MB または 60% のいずれか小さい方
    • x64: 物理 RAM の 1 テラバイトまたは 60% のいずれか小さい方
  • ワーカー プロセスのプライベート バイト制限と <キャッシュ privateBytesLimit/> の両方が設定されている場合、キャッシュでは 2 つ以上が使用されます。

  • 1.x と同様に、キャッシュ エントリを削除して GC を呼び出します。次の 2 つの理由で収集します。

    • プライベート バイトの制限に非常に近い
    • 使用可能なメモリが 10% に近い、または 10% 未満である
  • キャッシュの percentagePhysicalMemoryUseLimit/> を 100 に設定<することで、低い使用可能なメモリ条件のトリミングとキャッシュを効果的に無効にすることができます。

  • 1.x とは異なり、2.0 はトリミングを中断し、最後の GC の場合は呼び出しを収集します。Collect では、(キャッシュ) メモリ制限の 1% を超えるプライベート バイトまたはマネージド ヒープのサイズが減少しませんでした。

ラボ 1: カスタム キャッシュの依存関係

  1. 新しい Web サイトを作成します。

  2. cache.xml という名前の新しい XML ファイルを追加し、Web アプリケーションのルートに保存します。

  3. default.aspx の分離コードの Page_Load メソッドに次のコードを追加します。

    System.Web.Caching.CacheDependency dep = new
        System.Web.Caching.CacheDependency(Server.MapPath("cache.xml"));
    Response.AddCacheDependency(dep);
    Cache.Insert("time", DateTime.Now.ToString());
    Response.Write(Cache["time"]);
    
  4. ソース ビューの default.aspx の先頭に次を追加します。

    <%@ OutputCache Duration="240" VaryByParam="None" %>
    
  5. Default.aspx を参照します。 時間は何と言いますか?

  6. ブラウザーを更新します。 時間は何と言いますか?

  7. cache.xmlを開き、次のコードを追加します。

    <anElement></anElement>
    
  8. cache.xml保存します。

  9. ブラウザーを更新します。 時間は何と言いますか?

  10. 以前にキャッシュされた値を表示する代わりに時刻が更新された理由を説明します。

ラボ 2: Polling-Based キャッシュ依存関係の使用

このラボでは、前のモジュールで作成したプロジェクトを使用して、GridView コントロールと DetailsView コントロールを使用して Northwind データベース内のデータを編集できます。

  1. Visual Studio 2005 でプロジェクトを開きます。

  2. Northwind データベースに対して aspnet_regsql ユーティリティを実行して、データベースと Products テーブルを有効にします。 Visual Studio コマンド プロンプトから次のコマンドを使用します。

    aspnet_regsql -S server -ed -d Northwind -E -et -t Products
    
  3. web.config ファイルに次を追加します。

    <caching>
        <sqlCacheDependency enabled = "true" pollTime = "60000" >
            <databases>
                <add name="Northwind" connectionStringName = "Northwind" pollTime = "9000000" />
            </databases>
        </sqlCacheDependency>
    </caching>
    
  4. showdata.aspx という名前の新しい Web フォームを追加します。

  5. showdata.aspx ページに次の @ outputcache ディレクティブを追加します。

    <%@ OutputCache SqlDependency="Northwind:Products" Duration="480" VaryByParam="None"%>
    
  6. showdata.aspx のPage_Loadに次のコードを追加します。

    Response.Write(DateTime.Now.ToString() + "<br><br>");
    
  7. showdata.aspx に新しい SqlDataSource コントロールを追加し、Northwind データベース接続を使用するように構成します。 [次へ] をクリックします。

  8. [ProductName] チェック ボックスと [ProductID] チェック ボックスをオンにし、[次へ] をクリックします。

  9. [完了] をクリックします。

  10. showdata.aspx ページに新しい GridView を追加します。

  11. ドロップダウンから [SqlDataSource1] を選択します。

  12. showdata.aspx を保存して参照します。 表示される時間をメモしておきます。