ASP.NETキャッシュ技術(一):ページ出力キャッシュを有効にする


MSDNは最も良い先生で、インターネットは最も知恵の生命体で、分かち合うのは最も重要な成長の道で、技術の進歩は学習、実践と革新にあります!
本シリーズで述べる技術と展示するコードは適用する.NET Framework 4.0とIIS 7でのASP.NET 4.0は、Visual Studio 2010を使用して開発されたサンプルコードであり、SQL Expressサービスを使用する必要がある場合があります.著者はMSDNと参考ネット文献を勉強した上で関連技術をまとめ、不足と誤りがあれば、皆さんの指摘を歓迎します.
キャッシュ・テクノロジーを使用する理由
これは、アプリケーションのパフォーマンスを向上させるための良い質問かもしれません.しかし、キャッシュ・テクノロジーをいつどのように適用すべきか、多くの人はよく分かりません.通常、一般的なASP.NETアプリケーションはキャッシュの使用に注目する人は少ないが、このようなアプリケーションが需要の拡大のため、より多くのデータを処理する必要があり、より多くのユーザーをロードする必要があり、より複雑な導入が必要な場合、一般的な方法は絶対にシステムのパフォーマンステーブルに手を焼いている.メモリが高価ではない時代には、オプティマイザ・コードがシステムに与えるパフォーマンスの向上よりも、優れたキャッシュ・アプリケーションの方が安価になります.ここでは,キャッシュ技術が万能ではないため,システムの様々なニーズと指標に依存してどのように使用されるかに依存する良好なキャッシュ応用について述べた.
ASP.NETキャッシュ技術における2つのレベル
ASP.NETのアプリケーションでは,ページ出力とアプリケーションデータの2つの面でキャッシュ技術を適用できる.
ページ出力をキャッシュとは、処理後のASPをメモリに保存することである.NETページ.通常はASP.NETページのリクエストにより、IIS 7は次のようなプロセスを経験します.
     
ページ出力をキャッシュした後、現在要求されているページのサーバキャッシュがすでに存在する場合、以上の実行プロセスは、「キャッシュの解析」のステップが完了すると、キャッシュされたページ内容を停止して返し、ページのサーバキャッシュが無効になるまでページに関するイベントが実行されない.ASP.NETはページ出力キャッシュに2つのサーバキャッシュモデルを提供し、ページ全体のキャッシュと一部のページキャッシュを提供し、一部のページキャッシュはコントロールキャッシュとキャッシュ後の置換の2つの動作を採用することができる.さらに優れているのは、ASP.NETはまた、要求パラメータに応じて同じページの異なるキャッシュを作成することもできる.ページ出力のキャッシュについては、後述します.
アプリケーションデータをキャッシュするのはASP.NETは、メモリに格納された任意のデータのキー/値ペアにアクセスするためのプログラミング方法を提供します.これらのキー/値ペアは、アプリケーションステータス(System.Web.HttpApplicationState)と同様に使用されますが、それらは失われやすいだけです.アプリケーション・データのキャッシュについては、後述します.
ページ出力キャッシュを開く
ASPXページファイルに@OutputCacheコマンドを含め、DurationとVaryByParamプロパティを設定することで、ページ出力キャッシュを簡単に有効にできます.Durationプロパティは、ページ出力キャッシュのキャッシュ時間を秒単位で指定します.VaryByParamプロパティここではまずnoneに設定し、その詳細は後述する.次のコードでは、ページ出力コンテンツを60秒キャッシュする方法を示します.
C# CODE   :No Title Code
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@ Page Language="C#" AutoEventWireup="true" %>
@ OutputCache Duration="60" VaryByParam="none" %>

span style="color:#ba2121;">"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

"http://www.w3.org/1999/xhtml">
"server">
    


    <script runat="<span" style="color:#ba2121;">"server"</span>>
        <span style="color:#008000;font-weight:bold;">protected</span> <span style="color:#008000;font-weight:bold;">void</span> <span style="color:#0000ff;">Page_Load</span>(<span style="color:#b00040;">object</span> sender, EventArgs e)
        <span style="color:#008000;font-weight:bold;">{</span>
            lblNowTime.Text = DateTime.Now.ToString(<span style="color:#ba2121;">"yyyy-MM-dd HH:mm:ss"</span>);
        <span style="color:#008000;font-weight:bold;">}</span>
    </script>
    </code></pre><form id="<span" style="color:#ba2121;">"form1" runat=<span style="color:#ba2121;">"server"</span>>
    <div>
        <label id="<span" style="color:#ba2121;">"lblNowTime" runat=<span style="color:#ba2121;">"server"</span> />
    </label></div>
    </form>

 
        </div> </td> 
      </tr> 
     </tbody> 
    </table> 
   </div> 
  </div> 
  <div id="rcode" style="display:none;">
         <title/>   <script runat="server"> protected void Page_Load(object sender, EventArgs e) { lblNowTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } </script> <form id="form1" runat="server"> <div> <label id="lblNowTime" runat="server"/> </div> </form>   
  </div> 
  <div id="bcode" style="display:none;"> 
  </div> 
  <p>         ,              ,       Page_Load         ,     60        (     “  ”   ,          )。</p> 
  <p><span style="color:#325785;font-size:medium;"><strong>         </strong></span></p> 
  <p>             ,      ,             ?               ,            ,               ,       ,             。               、      Web                           ,      。       ,HTTP 1.0                ,               HTTP 1.1                     HTTP 1.0      。</p> 
  <p>      HTTP           Cache-Control             。HTTP 1.1      Cache-Control        : </p> 
  <table style="width:699px;" border="1"> 
   <tbody> 
    <tr> 
     <td width="123" align="center" valign="top">  </td> 
     <td width="574" align="center" valign="top">  </td> 
    </tr> 
    <tr> 
     <td width="123" valign="top">public</td> 
     <td width="574" valign="top">          ,             ,     。</td> 
    </tr> 
    <tr> 
     <td width="123" valign="top">private</td> 
     <td width="574" valign="top">                ,           。   Cache-Control       。</td> 
    </tr> 
    <tr> 
     <td width="123" valign="top">no-cache</td> 
     <td width="574" valign="top">           ,                          。</td> 
    </tr> 
    <tr> 
     <td width="123" valign="top">no-store</td> 
     <td width="574" valign="top">           ,           ,              。</td> 
    </tr> 
    <tr> 
     <td width="123" valign="top">must-revalidate</td> 
     <td width="574" valign="top">          ,                   ,            。</td> 
    </tr> 
    <tr> 
     <td width="123" valign="top">proxy-revalidate</td> 
     <td width="574" valign="top">       must-revalidate,                    。</td> 
    </tr> 
    <tr> 
     <td width="123" valign="top">max-age=xxx</td> 
     <td width="574" valign="top">      xxx     ,       Exires   (HTTP 1.0            )     ,   max-age=xxx         HTTP 1.1       。      ,max-age   。</td> 
    </tr> 
   </tbody> 
  </table> 
  <p>         HTTP            ,              Cache-Control          :</p> 
  <table style="width:700px;" border="1"> 
   <tbody> 
    <tr> 
     <td width="270" align="center" valign="top">HTTP   </td> 
     <td width="430" align="center" valign="top">  </td> 
    </tr> 
    <tr> 
     <td width="270" valign="top">Cache-Control:max-age=3600</td> 
     <td width="430" valign="top">       60      ,             。</td> 
    </tr> 
    <tr> 
     <td width="270" valign="top">Cache-Control:no-cache</td> 
     <td width="430" valign="top">                     。</td> 
    </tr> 
    <tr> 
     <td width="270" valign="top">Cache-Control:public,max-age=3600</td> 
     <td width="430" valign="top">       60      ,                      。</td> 
    </tr> 
   </tbody> 
  </table> 
  <p>      <strong>     Cache-Control                     </strong>:</p> 
  <p>      (1)     :   Cache-Control     private、no-cache、must-revalidate,                   。       max-age=xxx  ,   xxx               。</p> 
  <p>      (2)     :   Cache-Control     private   must-revalidate,               ,       。     no-cache,           。      max-age,             。</p> 
  <p>      (3)     :   Cache-Control     private、must-revalidate、max-age,          。     no-cache,           。</p> 
  <p>      (4)     :   Cache-Control    ,         。</p> 
  <p>         Cache-Control           ,         (       ),              If-Modified-Since   ,                         。   ASP.NET   ,               ,             ,                          ,    304    ,                  ;                   ASP.NET       ,   200           。  ,<strong>        304                         ,              。</strong></p> 
  <p><strong>      </strong>      ,        HTTP               ,  ASP.NET                 ,          。      ,     HTTP            ,           Cache-Control:no-cache        。     IIS    ,ASP.NET                  ,             ,              ;                    ,    200                   ;                   ,          ASP.NET           ,                   。</p> 
  <p>         ASP.NET       ,          HTTP          ASP.NET        ,                。</p> 
  <p><span style="color:#325785;font-size:medium;"><strong>   @ OutputCache   </strong></span></p> 
  <p>         @ OutputCache         Duration   VaryByParam   , “         ”          Location   NoStore   。NoStore          ,      true,   Cache-Control      no-store   。Location      OutputCacheLocation      ,            HTTP      。</p> 
  <table style="width:700px;" border="1"> 
   <tbody> 
    <tr> 
     <td width="125" valign="top">    </td> 
     <td width="575" valign="top">  </td> 
    </tr> 
    <tr> 
     <td width="125" valign="top">Any</td> 
     <td width="575" valign="top">                  、          (        )          。<strong>      Cache-Control:public,         。</strong></td> 
    </tr> 
    <tr> 
     <td width="125" valign="top">Client</td> 
     <td width="575" valign="top">                  。<strong>      Cache-Control:private,         。</strong></td> 
    </tr> 
    <tr> 
     <td width="125" valign="top">Downstream</td> 
     <td width="575" valign="top">           HTTP 1.1       ,      ,                 。<strong>      Cache-Control:public,         。</strong></td> 
    </tr> 
    <tr> 
     <td width="125" valign="top">Server</td> 
     <td width="575" valign="top">            Web     。<strong>      Cache-Control:no-cache,         。</strong></td> 
    </tr> 
    <tr> 
     <td width="125" valign="top">None</td> 
     <td width="575" valign="top">       ,      。<strong>      Cache-Control:no-cache,         ,    ASPX        @ OutputCache      。</strong></td> 
    </tr> 
    <tr> 
     <td width="125" valign="top">ServerAndClient</td> 
     <td width="575" valign="top">                       ,           。<strong>     Cache-Control:private,         。</strong></td> 
    </tr> 
   </tbody> 
  </table> 
  <p>           @ OutputCache               ,                  ,         “         ”             ,            ,           ,         。</p> 
  <p><span style="color:#325785;font-size:medium;"><strong>  </strong></span></p> 
  <p>              ASP.NET        ,      ASPX            ,         ,        ASP.NET          ,“         ”         ,           ,    。        ,    Fiddler     HTTP              。</p> 
 </div> 
</div>
                            </div>
                        </div>