Visual C# .NET を使用して ASP.NET でページ出力キャッシュを制御する方法

文書翻訳 文書翻訳
文書番号: 308375 - 対象製品
この記事は、以前は次の ID で公開されていました: JP308375
すべて展開する | すべて折りたたむ

目次

概要

この資料では、ASP.NET と Visual C# .NET で @ OutputCache ディレクティブを使用してページ出力キャッシュを制御する方法について説明します。この技法を使用することにより、サイトで最も頻繁にアクセスされるページをキャッシュでき、これによって Web サーバーのスループットが大きく向上する可能性があります。一般に、スループットは 1 秒あたりの要求数として測定されます。この資料のサンプル コードでは Duration 属性と VaryByParam 属性の使用方法を示していますが、この資料では、@ OutputCache ディレクティブと共に使用できる他の方法についても簡単に説明しています。

: この資料には、@ OutputCache ディレクティブのすべての属性と使用例が詳しく説明されているわけではありません。詳細については「関連情報」を参照してください。


必要条件

  • Microsoft Windows 2000 または Windows XP
  • Microsoft .NET Framework
  • Microsoft Internet Information Services (IIS)
  • Microsoft ASP.NET

@ OutputCache ディレクティブの概要

@ OutputCache ディレクティブを使用してページ出力キャッシュを制御するには、単にこのディレクティブをページの上部に追加するだけです。このディレクティブは、Page.InitOutputCache メソッドによって HttpCachePolicy クラスのメソッドに変換されます。

@ OutputCache ディレクティブに含まれる属性と設定値を次に示します。
  • Duration : この属性には、項目がキャッシュに保持される期間を指定します。Duration の値は秒単位で記述します。
  • VaryByParam : この属性を使用すると、Get または Post パラメータに基づいてキャッシュ エントリが決定されます。たとえば、VaryByParam 属性に testVal という名前の QueryString 変数を設定すると、異なる testVal 値を含むページ要求がそれぞれ異なるページとしてキャッシュされます。VaryByParam 属性の構文を次のコードに示します。
    <%@ OutputCache Duration="Seconds" VaryByParam="testVal"%>
    						
    : 異なるバージョンの項目がすべてキャッシュされるようにするには、アスタリスク (*) を指定します。キャッシュされる項目のバージョンが 1 つしかない場合は、"none" を指定することもできます。
  • Location : この属性には、項目がキャッシュされる場所を指定します。以下の場所を指定できます。
    • Any
    • Client
    • Downstream
    • Server
    • None

    Location 属性の構文を次のコードに示します。
    <%@ OutputCache Duration="Seconds" Location="Client" %>
    					
  • VaryByCustom : この属性はデフォルトで "Browser" に設定され、項目を要求したブラウザのバージョンごとに、その項目の異なるインスタンスがキャッシュされることを示します。たとえば、Microsoft Internet Explorer 5 と Internet Explorer 5.5 の両方から項目が要求されたとします。VaryByCustom が "Browser" に設定されていると、ブラウザのバージョンごとにキャッシュ エントリが作成されます。この属性に "string" を設定しても、他のカスタム シナリオに対してキャッシュを制御することはできません。Global.asax ファイルの HttpApplication.GetVaryByCustomString メソッドを無効にするコードを記述しない限り、"string" を指定しても効果はありません。

    VaryByCustom 属性の構文を次のコードに示します。
    <%@ OutputCache Duration="Seconds" VaryByCustom="string" %>
    					
  • VaryByHeader : この属性には、キャッシュ エントリを切り替える条件として特定の HTTP ヘッダー値を指定できます。VaryByHeader 属性の構文を次のコードに示します。
    <%@ OutputCache Duration="60" VaryByHeader="Accept-Language" %>
    					

@ OutputCache Duration サンプルの作成手順

以下の手順では、ページ出力キャッシュの Duration 属性を使用して項目のキャッシュ期間を指定する方法を示します。
  1. 次の手順に従って、新しい Visual C# ASP.NET Web アプリケーション プロジェクトを作成します。
    1. Visual Studio .NET を起動します。
    2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
    3. [新しいプロジェクト] ダイアログ ボックスで、[プロジェクトの種類] ボックスの一覧の [Visual C# プロジェクト] をクリックし、[テンプレート] ボックスの一覧の [ASP.NET Web アプリケーション] をクリックします。[場所] ボックスで、URL パス内のデフォルトの名前を OutputCacheDemo に変更し、[OK] をクリックします。
  2. 次の手順に従って、Visual Studio .NET で新しい .aspx ページを作成します。
    1. ソリューション エクスプローラでプロジェクト ノードを右クリックし、[追加] をポイントして、[Web フォームの追加] をクリックします。
    2. [ファイル名] ボックスに OutputCacheDuration.aspx と入力し、[開く] をクリックします。
  3. Visual Studio .NET によってページに追加されたデフォルトの HTML コードを削除します。
  4. 次のコードを選択して右クリックし、[コピー] をクリックします。Visual Studio .NET で [編集] メニューの [HTML として貼り付け] をクリックし、コードを .aspx ページに貼り付けます。
    <%@ OutputCache Duration="20" VaryByParam="none"%>
    <HTML>
       <HEAD>
       <script language="C#" runat="server">
       void Page_Load(object sender, EventArgs e) 
       {	
          Label1.Text = "Time: " + DateTime.Now.TimeOfDay.ToString();
       }
       </script>
       </HEAD>
       <body>
          <STRONG>@ OutputCache Duration Sample</STRONG>
          <hr>
          <br>
          <asp:Label id="Label1" runat="server">Label</asp:Label>
          <br>
       </body>
    </HTML>
    					
  5. [ファイル] メニューの [OutputCacheDuration.aspx の保存] をクリックし、ページを保存します。
  6. 統合開発環境 (IDE) で、[ビルド] メニューの [ソリューションのビルド] をクリックします。
  7. サンプルを実行するには、ソリューション エクスプローラで [OutputCacheDuration.aspx] を右クリックし、[ブラウザで表示] をクリックします。
  8. ブラウザにページが表示されたら、ラベルに表示されている時刻を確認します。
  9. ブラウザでページを最新の情報に更新します。時刻が前と変わっていないことを確認します。有効期間として設定されている 20 秒を経過してからページを更新した場合は、新しくキャッシュされたバージョンのページが表示されます。

    : 外部ブラウザでページを表示している場合は、F5 キーを押すとページを更新できます。Visual Studio .NET IDE の内部ブラウザでページを表示している場合は、そのページを右クリックし、[ブラウザの更新] をクリックするとページを更新できます。

@ OutputCache VaryByParam サンプルの作成手順

以下の手順では、ページ出力キャッシュの VaryByParam 属性を使用することにより、ページに渡された QueryString 変数の特定の値に基づいて異なるバージョンのページ キャッシュが作成されるようにする方法を示します。
  1. 次の手順に従って、Visual Studio .NET で新しい .aspx ページを作成します。
    1. ソリューション エクスプローラでプロジェクト ノードを右クリックし、[追加] をポイントして、[Web フォームの追加] をクリックします。
    2. [ファイル名] ボックスに OutputCacheVaryByParam.aspx と入力し、[開く] をクリックします。
  2. Visual Studio .NET によってページに追加されたデフォルトの HTML コードを削除します。
  3. 次のコードを選択して右クリックし、[コピー] をクリックします。Visual Studio .NET で [編集] メニューの [HTML として貼り付け] をクリックし、コードを .aspx ページに貼り付けます。
    <%@ OutputCache Duration="20" VaryByParam="testVal"%>
    <HTML>
       <HEAD>
          <script language="C#" runat="server">
       void Page_Load(object sender, EventArgs e) 
       {	
          Label1.Text = "Time: " + DateTime.Now.TimeOfDay.ToString();
       }
       </script>
       </HEAD>
       <body>
          <P>
             <STRONG>@ OutputCache VaryByParam Sample</STRONG>
          </P>
          <P>
             <hr>
          </P>
          <P>
             <br>
             <asp:Label id="Label1" runat="server"></asp:Label>
             <br>
             <hr>
             <a href=http://yourservername/OutputCacheDemo/OutputCacheVaryByParam.aspx?testVal=123">testVal(123)</a>
             <br>
             <a href=http://yourservername/OutputCacheDemo/OutputCacheVaryByParam.aspx?testVal=345">testVal(345)</a>
          </P>
       </body>
    </HTML>
    						
    : 上記のコードでは、2 つのハイパーリンクを変更して、使用中の Web サーバーの名前を反映する必要があります。また、VaryByParam 属性は、testVal という QueryString 変数の値に基づいて変化するように設定されています。これにより、QueryString 変数の testVal の値が一致するインスタンスごとにページ出力がキャッシュされます。
  4. [ファイル] メニューの [OutputCacheVaryByParam.aspx の保存] をクリックし、ページを保存します。
  5. IDE で [ビルド] メニューの [ソリューションのビルド] をクリックします。
  6. サンプルを実行するには、ソリューション エクスプローラで [OutputCacheVaryByParam.aspx] を右クリックし、[ブラウザで表示] をクリックします。
  7. ブラウザにページが表示されたら、[testVal(123)] をクリックします。これにより、ブラウザには同じページが表示されますが、testVal という QueryString 変数の値は "123" に設定されます。表示された時刻を確認します。
  8. もう一度 [testVal(123)] をクリックします。時刻が前と変わっていないことを確認します。ページ出力は testVal 変数の値に基づいてキャッシュされています。
  9. [testVal(345)] をクリックします。ページに新しい時刻が表示されることを確認します。
  10. もう一度 [testVal(345)] をクリックします。前のページ出力がキャッシュされており、それがブラウザに表示されます。
  11. [testVal(123)] をクリックして最初のインスタンスに戻ります。渡された QueryString 変数の値に基づき、別のバージョンのページ出力キャッシュが表示されます。

トラブルシューティング

  • VaryByParam を使用する場合は、QueryString 変数の値で大文字と小文字が変わると、異なるキャッシュ エントリが追加されることに注意する必要があります。
  • Duration は秒単位で指定することに注意する必要があります。
  • VaryByCustom を使用し、Global.asax ファイルの HttpApplication.GetVaryByCustomString メソッドを無効にしても、属性に指定されたカスタム文字列と一致する情報が見つからない場合は、デフォルトの設定である "Browser" が使用されます。

関連情報

ページ出力キャッシュの詳細については、以下のマイクロソフト Web サイトを参照してください。
GotDotNet クイック スタート チュートリアル「ページの出力キャッシュ」
http://ja.gotdotnet.com/quickstart/aspplus/doc/outputcaching.aspx

Microsoft .NET Framework Software Development Kit (SDK)
http://msdn.microsoft.com/library/en-us/dnanchor/html/netfxanchor.asp

ASP.NET ページのキャッシュ
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconaspoutputcache.asp

@ OutputCache
http://msdn.microsoft.com/library/ja/cpgenref/html/cpconoutputcache.asp

プロパティ

文書番号: 308375 - 最終更新日: 2006年5月16日 - リビジョン: 7.4
この資料は以下の製品について記述したものです。
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
キーワード:?
kbcaching kbhowtomaster kbio KB308375
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com