[セットトップ]ASP.NETキャッシュまとめ


一、キャッシュ概念、キャッシュのメリット、タイプ.
キャッシュは1种の空间で时间を交换する技术で、通俗的に言えばあなたの得たデータをメモリの中でしばらく保存して、この短い时间の内にサーバーはデータベースを読み取らないで、あるいは本当のデータの源で、あなたがメモリの中に保存したデータを読み取って、ここであなたはどのようにデータを保存して、どんな様子のデータを保存することができて、时间の设定を保存することができて、実際のデータソースデータが変更されると、サーバは読み取りにばらつきがあるのではないでしょうか.焦らないで、次はゆっくり話します.の
キャッシュの利点は、キャッシュはウェブサイトの性能最適化に不可欠なデータ処理メカニズムであり、データベースの圧力を効果的に緩和することができます.例えば、ウェブサイトの毎分のクリック率は100万で、キャッシュの静的ページを使用しなければ、ここにもviewstateがない場合(viewstateは大量の文字列が発生し、サーバのインタラクティブなデータに圧力がかかるので、一般的にページはviewstateを無効にし、キャッシュを採用する)は、ユーザーが一度このページをクリックするだけで、このページは1回データライブラリを読み込むので、データベースに与える圧力は想像できますが、ここでキャッシュを使用すると、キャッシュの有効期間を1分に設定し、すると、この1分以内に100万回クリックするのと、1回クリックするのと同じように、データベースが読み込まれ、データソースがメモリにキャッシュされます.
            asp.Netのキャッシュは主にページキャッシュ,データソースキャッシュ,カスタムデータキャッシュの3つの主要なタイプに分けられる.
二、データキャッシュ
public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //  Cache["date"]=      ;                  
            string datastr = DateTime.Now.ToLongTimeString();
            Response.Write("       :"+datastr+"</br>");  //          ,     ,          。

            if (Cache["date"] == null) //      value  date       
            {
                Cache["date"] = datastr;
                Response.Write("        :"+Cache["date"] + "          ");   //          ,     ,          。
            }
            else
            {
                Response.Write(Cache["date"] + "            ");//           ,     ,         ,    。
            }
        }
    }

上のデータ・キャッシュはキャッシュの有効期限が設定されていないため、最初の出力時間は現在の時間(ページのリフレッシュは変わります)、2番目の出力時間は最初にキャッシュに格納された時間(ページのリフレッシュは変わりません).
次に、データキャッシュに実用的なパラメータ(上コード)を追加します.
protected void Page_Load(object sender, EventArgs e)
        {
            string ids="";
            Maticsoft.BLL.ScriptsBak bll = new Maticsoft.BLL.ScriptsBak();
            List<Maticsoft.Model.ScriptsBak> list = new List<Maticsoft.Model.ScriptsBak>();
            list = bll.GetAll();
            for (int i = 0; i < list.Count; i++)
            {
                ids += list[i].ScriptId.ToString()+"--";
            }
            ids = ids + " ";  //   ids           id    --          
            if (Cache["key"] == null)
            {
                Cache.Insert("key", ids, null, DateTime.Now.AddSeconds(40), System.Web.Caching.Cache.NoSlidingExpiration);  //        ,      
                //"key"     ,ids       ,null      ,           ,   null,            
                   //null         40 
                  //              ,ASP.NET                    ,       ,
                  //              ,                40 ,40            。 
                Response.Write("cache   ---" + Cache["key"] + "</br>");
            }
            else
            {
                Response.Write("cache   ---" + Cache["key"] + "</br>");
            }
            Response.Write("     ---" + ids + "</br>");
        }

≪データ・キャッシュ|Data Cache|ldap≫:オブジェクト・キャッシュ・セットに時間のかかるエントリを追加し、キー値で格納します.Cache.Insert()メソッドを使用して、キャッシュの期限切れ、優先度、依存項目などを設定できます.
三、ページキャッシュ
 protected void Page_Load(object sender, EventArgs e)
        {
            string date = DateTime.Now.ToString();
            Response.Write(date);
        }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="cache.WebForm1" %>
<%@ OutputCache Duration="10" VaryByParam="none" %>  
<!---           ,         ,     ,              ,    Page_Load  。
     Page_Load          -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <div>
    
    </div>
</body>
</html>

<%@OutputCache Duration="10"VaryByParam="none"%>このコマンドラベルはこのページにキャッシュを追加し、Durationというパラメータはページキャッシュ時間を10秒、VaryByParamという指定ページパラメータ、つまりこのような、例えばこのようなページhttp://www.cnblogs.com/knowledgesea/admin/EditPosts.aspx?postid=2536603&update=1では、彼のパラメータはpostidとupdateです.このようなページでは、コマンドラベルを<%@OutputCache Duration="10"VaryByParam="postid;update"%>パラメータとパラメータの間をセミコロンで区切ることができます.このようにして、個別のページごとにキャッシュされます.彼がキャッシュしているのはpostid=2536603&update=1またはpostid=1&update=2などの異なるパラメータページがすべてキャッシュされます.ここでは、<%@OutputCache Duration="10"VaryByParam="*"%>を使用して、現在のページの下のパラメータが異なるすべてのページをキャッシュする簡単な方法を使用できます.
ASP.NETはページのライフサイクルや関連コードを実行するのではなく、キャッシュされたページを直接使用します.簡単な理解は私の注釈で紹介しています.
四、コントロールキャッシュ
1.ObjectDataSourceのようなデータソースコントロールは、プロパティバーで適切なプロパティを見つけて設定できます.次に、起動キャッシュを設定し、キャッシュ時間を10秒、時間タイプを絶対時間とします.

2.キャッシュ属性のないコントロールをキャッシュする
protected void Page_Load(object sender, EventArgs e)  
        {
            string date = DateTime.Now.ToString();
            TextBox1.Text = date;
        }
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="cache.WebForm1" %>
<%@ OutputCache Duration="10" VaryByControl="TextBox1"%>
<!--VaryByControl          id-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        </div>
    </form>
</body>
</html>

ここのTextBoxコントロールにはキャッシュが追加されており、ここでのキャッシュ時間は10秒、つまり10秒以内のASP.NETは、ページのライフサイクルや関連コードを実行するのではなく、キャッシュされたページを直接使用します.
五、キャッシュ依存
 
protected void Page_Load(object sender, EventArgs e)  
        {
            string str = "";
            if (Cache["key"] == null)
            {
                str = System.IO.File.ReadAllText(Server.MapPath("TextFile1.txt")); //  TextFile1.txt      
                CacheDependency dp = new CacheDependency(Server.MapPath("TextFile1.txt"));//       dp
                Cache.Insert("key", str, dp);
                Response.Write(Cache["key"]);   //  TextFile1.txt                    ,  TextFile1.txt              TextFile1.txt      
            }
            else
            {
                Response.Write(Cache["key"]);
            }

        }

キャッシュ依存性は、キャッシュを他のリソースに依存させ、依存性が変更されると、キャッシュエントリが自動的にキャッシュから削除されます.キャッシュ依存性は、アプリケーションのCache内のファイル、ディレクトリ、または他のオブジェクトとのキーです.ファイルまたはディレクトリが変更されると、キャッシュは期限切れになります.
六、プロファイルにキャッシュを設定する
<system.web>
  <caching>
    <outputCacheSettings>
      <outputCacheProfiles>
     <addname="ProductItemCacheProfile" duration="60"/>
   </outputCacheProfiles>
</outputCacheSettings>
   </caching>
</system.web>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="cache.WebForm1" %>
<%@ OutputCache CacheProfile="ProductItemCacheProfile" VaryByParam="none" %>
<!--   CacheProfile             -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <div>
    
    </div>
</body>
</html>

これにより、60秒キャッシュされたページがページに追加されます.
七、キャッシュのコールバック関数
 
protected void Page_Load(object sender, EventArgs e)  
        {
            string str = "";
            if (Cache["key"] == null)
            {
                str = System.IO.File.ReadAllText(Server.MapPath("TextFile1.txt")); //  TextFile1.txt      
                CacheDependency dp = new CacheDependency(Server.MapPath("TextFile1.txt"));//       dp
                Cache.Insert("key", str, dp, DateTime.Now.AddSeconds(20), Cache.NoSlidingExpiration, CacheItemPriority.Low, CacheItemRemovedCallback); 
                //CacheItemPriority                  ,                           ,           。
                Response.Write(Cache["key"]);   //  TextFile1.txt                    ,  TextFile1.txt              TextFile1.txt      
            }
            else
            {
                Response.Write(Cache["key"]);
            }

        }

        public void CacheItemRemovedCallback(string key, object value, CacheItemRemovedReason reason) //             ,       Cache.Insert()              ,
            //       ,     Cache.Insert()           ,                     。
        {
            System.IO.File.WriteAllText(Server.MapPath("log.txt"),"       :"+reason.ToString());
        }

例のコールバック関数はlogを生成することを書く.txt、ファイルは、キャッシュが除去されるたびに理由を記録する.
作者:鄭某人出典:http://jsonzheng.cnblogs.com転載や共有を歓迎しますが、必ず文章の出所を声明してください.文章が役に立つなら、推薦したり注目したりしてほしいです.