亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.Net緩存總結

2019-11-17 04:16:42
字體:
來源:轉載
供稿:網友

提高性能最好最快的辦法當然是通過緩存來改善,對于任何一個web開發者都應該善用緩存。asp.net下的緩存機制十分強大,用好緩存機制可以讓我們極大的改善web應用的性能,下面是一些總結的緩存的知識點,與大家分享交流:

1.頁面緩存 

       要實現頁面輸出緩存,只要將一條 OutputCache 指令添加到頁面即可?! ?/P>

        <%@ OutputCache Cache

             CacheProfile

             用于定義與該頁關聯的緩存設置的名稱。是可選屬性,默認值為空字符("")。需要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。在頁面中指定此屬性時,屬性值必須與Web.config文件<outputCacheSettings>配置節下的outputCacheProfiles元素中的一個可用項的名稱匹配。如果此名稱與配置文件項不匹配,將引發異常。

             NoStore

             該屬性定義一個布爾值,用于決定是否阻止敏感信息的二級存儲。需要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。將此屬性設置為true等效于在請求期間執行代碼“Response.Cache.SetNoStore();”。

            Duration

             用于設置頁面或者用戶控件緩存的時間。單位是秒。通過設置該屬性,能夠為來自對象的HTTP響應建立了一個過期策略,并將自動緩存頁或用戶控件輸出。需要注意的是,Duration屬性是必需的,否則將會引起分析器錯誤。

             Shared

             該屬性定義一個布爾值,用于確定用戶控件輸出是否可以由多個頁共享。默認值為false。注意,包含在ASP.NET頁中的@ OutputCache指令不支持此屬性。

            Location

             用于指定輸出緩存項的位置。其屬性值是OutputCacheLocation枚舉值,它們是Any、Client、Downstream、None、Server和ServerAndClient。默認值是Any,表示輸出緩存可用于所有請求,包括客戶端瀏覽器、代理服務器或處理請求的服務器上。需要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。

             SqlDependency

             該屬性標識一組數據庫/表名稱對的字符串值,頁或控件的輸出緩存依賴于這些名稱對。需要注意:SqlCacheDependency類監視輸出緩存所依賴的數據庫中的表,因此,當更新表中的項時,使用基于表的輪詢將從緩存中移除這些項。當通知(在SQL Server 2005中)與CommandNotification值一起使用時,最終將使用SqlDependency類向SQL Server 2005服務器注冊查詢通知。另外,SqlDependency屬性的CommandNotification值僅在ASP.NET頁中有效??丶荒軐⒒诒淼妮喸冇糜贎 OutputCache指令。

             VaryByControl

             該屬性使用一個分號分隔的字符串列表來更改用戶控件的輸出緩存。這些字符串代表在用戶控件中聲明的ASP.NET服務器控件的ID屬性值。除非已經包含了VaryByParam屬性,否則在@ OutputCache指令中,該屬性是必需的。

             VaryByCustom

             用于自定義輸出緩存要求的任意文本。如果賦予該屬性值是browser,緩存將隨瀏覽器名稱和主要版本信息的不同而異。如果輸入了自定義字符串,則必須在應用程序的Global.asax文件中重寫Httpapplication.GetVaryByCustomString方法。

            VaryByHeader

             該屬性中包含由分號分隔的HTTP標頭列表,用于使輸出緩存發生變化。當將該屬性設為多標頭時,對于每個指定的標頭,輸出緩存都包含一個請求文檔的不同版本。VaryByHeader屬性在所有HTTP 1.1緩存中啟用緩存項,而不僅限于ASP.NET緩存。用戶控件中的@ OutputCache指令不支持此屬性。

             VaryByParam

             該屬性定義了一個分號分隔的字符串列表,用于使輸出緩存發生變化。默認情況下,這些字符串與用GET方法屬性發送的查詢字符串值對應,或與用POST方法發送的參數對應。當將該屬性設置為多參數時,對于每個指定的參數,輸出緩存都包含一個請求文檔的不同版本??赡艿闹蛋ā皀one”、“*”和任何有效的查詢字符串或POST參數名稱。值得注意的是,在輸出緩存ASP.NET頁時,該屬性是必需的。它對于用戶控件也是必需的,除非已經在用戶控件的@ OutputCache指令中包含了VaryByControl屬性。如果沒有包含,則會發生分析器錯誤。如果不需要使緩存內容隨任何指定參數發生變化,則可將該值設為“none”。如果要使輸出緩存根據所有參數值發生變化,則將屬性設置為“*”。
     
       創建頁面輸出緩存文件依賴

       示例代碼:Response.AddFileDependency(MapPath("test.xml"));
       如需要建立依賴多文件關系,則使用AddFileDependencies()方法。
      
       使用編程方式設置頁面緩存過期
      
       示例代碼:HttpResponse.RemoveOutputCacheItem(Page.ResolveUrl("~/test.aspx"));
       此方法只接受一個"虛擬絕對"路徑,因此需用Page.ResolveUrl()方法轉換
      
       使用編程方式設置多個頁面緩存過期(創建鍵依賴(key dependency))
      
       示例代碼:
       緩存頁面:PageLoad:
        Cache.Insert(“key”,DateTime.Now);
        Response.AddCacheItemDependency("key");
       通過此法向多個頁面添加依賴項
       移除依賴項:PageLoad:
       Cache.Remove("key");

       以編程方式操作頁面輸出緩存

       操作由Response.Cache屬性暴露的HttpCachePolicy類對象的方法。

       創建頁面輸出緩存配置

    <system.web>
          <caching>
                <outputCacheSettings>
                    <outputCacheProfiles>
                            <add name="CacheProfile1" duration="60" />
                    </outputCacheProfiles>
                </outputCacheSettings>
          </caching>
       </system.web>
http://www.devdao.com
2.部分頁面緩存

       緩存后替換
      
       采用聲明方式,使用Substitution控件,設置MethodName屬性所需的方法,此方法必須是靜態方法,因為當前頁輸出緩存時,頁面實例還沒被創建。注:AdRotator內部使用了緩存后替代。
      
       以編程方式設置緩存后替換,使用Response.WriteSubstitution()方法,好處:1,此方法引用的方法不一定是當前類的方法,可以是另一個類的實力或靜態方法。2,可以在自定義控件中使用此方法實現緩存后替換。
      
       部分頁面緩存:用戶控件緩存
      
       給用戶控件添加<%@ OutputCache%>指令。此指令包含一個Shared屬性,可設置共享用戶控件的輸出緩存。

       以編程方式設置用戶控件緩存

       當用戶控件中包括<%@ OutputCache%>指令時,可以通過用戶控件的CachePolicy屬性所暴露的ControlCachePolicy類的實例的屬性控制修改空間如何緩存。

       創建用戶控件緩存的文件依賴

       可以使用CacheControlPolicy.Dependency屬性在一個緩存了的用戶控件和文件系統中一個文件間創建一個依賴,示例代碼:
       PageLoad:
       CacheDependency depend=new CacheDependency(MapPath("~/test.xml"));
       this.CachePolicy.Dependency=depend;
      
       緩存動態載入的用戶控件

       可以使用Page.LoadControl()方法載入用戶控件,當具有緩存特性的用戶控件被載入時,Asp.net Framework自動一個PartialCachingControl類的實例包裝用戶控件。示例代碼:
       PageLoad:
       PartialCachingControl cacheme=(PartialCachingControl)Page.LoadControl("test.ascx");
       Cacheme.CachePolicy.SetExpires(DateTime.Now.AddSeconds(10));
       PlaceHolder1.Controls.Add(cacheme);
       Lable1.Text=cacheme.CachePolicy.Duration.ToString();

3.使用DataSource緩存

       SqlDataSource、ObjectDataSource、XmlDataSource控件都包括了用于緩存DataSource承載的屬性,好處是數據源控件可以在數據更新時自動重新載入數據。并且可以在多個頁面間共享相同的數據,通過一些屬性的組合來識別:SelectCommand、SelectParameters、ConnectionString。如果屬性相同,即共享相同的緩存數據。

       通過設置屬性設置緩存過期策略

       包括絕對緩存(EnableCaching="True" CacheDuration=“xxx”)和Sliding緩存(EnableCaching="True" CacheExpirationPolicy="Sliding" CacheDuration=“xxx”)
      
       使用ObjectDataSource控件緩存
      
       通過設置控件的EnableCaching、CacheExpirationPolicy、CacheDuration屬性以及SelectMethod所制定的方法名來完成。

       使用XmlDataSource控件緩存

       設置DataFile屬性創建一個文件依賴。

       創建數據源控件鍵值依賴
      
       操作步驟
       1、設置數據源控件的CacheKeyDependency屬性(key);
       2、在Global.asax創建初始化的(key)緩存項目。代碼如下:
       Void Application_Start(Object Sender,EventArgs e)
        {
             HttpContext context=HttpContext.Current;
             context.Cache.Insert(
             "key",DateTime.Now,null,DateTime.MaxValue,Cache.NoSlidingExpiration,CacheItemPriority.NotRemovable,null
            );
        }
       3、在用于更改數據的頁面上移除緩存項目(key);
       如在DetailsView控件的ItemInserted事件中重新插入緩存項目,此時每個依賴于這個鍵值(key)的DataSource會自動重新載入數據,代碼如下:
       protected void DetailsView_ItemInserted(object sender,DetailsViewInsertedEventArgs e)
       {
           Cache.Insert("key",Datetime.Now);
        }
       注:以上key值采用當前時間并非必須。

4.Cache對象

       幾乎可以給緩存添加任何對象,例如,可以添加自定義控件,DataSet,DataTable,ArrayList和List到緩存。注意:使用從緩存中返回的任何項目,應該總是要檢查項目是否為空,如果一個項目已經被刪除了,則當將來試圖從緩存中讀取時,就會返回null。
       詳細信息查看msdnCache 成員
       添加數據緩存到Cache對象示例代碼:
        void Page_Load()
        {
             DataTable dt=(DataTable)Cache["dtkey"];
              if(dt==null)
                {
                      dt=getdtFromDB();   //此處調用方法從數據庫中返回數據項DataTable
                      Cache.Insert("dtKey",dt,null,DateTime.Now.AddHours(1),Cache.NoSlidingExpiration);   //此處使用絕對過期策略添加項目
                 }
                GridView1.DataSource=dt;
                GridView1.DataBind();
        }
         private DataTable getdtFromDB()
       {
          //略......
        }

       使用依賴添加項目

       Asp.net Framework包括三種緩存依賴
       1、CacheDependency——用于創建一個文件依賴或緩存鍵值依賴。
       2、SqlCacheDependency——用于創建一個對于Microsoft SQL Server數據庫表或SQL Server 2005數據庫查詢的依賴。
       3、AggregateCacheDependency——用于使用多個CacheDependency對象創建依賴,例如,可以用該對象組合文件和Sql依賴。

       CacheDependency類是基類,其他兩個類都是從該類繼承。

       指定緩存項目優先級
      
       可以指定CacheItemPriority枚舉類型任意值。

       配置緩存
       
       詳細信息查看Msdn Caching元素

5.使用SQL緩存依賴

       Asp.net Framework支持兩種類型的SQL緩存依賴:拉和推。第一種模式使用表輪詢的 ASP.NET 實現,第二種模式使用 SQL Server 2005 的查詢通知功能。可以對任何最近版本的Ms SQL Server,包括Ms SQL server 2005 Express、Ms SQL Server 2000 和 Ms SQL Server 7.0,使用拉SQL緩存依賴。第二種類型推緩存依賴則只能用于Ms SQL Server 2005和Ms SQL server 2005 Express,因為他們依賴SQL Server的Service Broker。
      
       使用拉SQL緩存依賴

        實質上拉SQL緩存依賴使用數據庫tigger,當表被修改時,tigger被觸發,名為AspNet_SqlCacheTablesForChangeNotification的數據表的一行數據被更新,來記錄修改情況,Asp.net Framework使用一個后臺線程,來定期拉數據表的修改信息。如果有修改,則依賴于數據表的緩存項目被移除。
       配置拉SQL緩存依賴:
       1、必須對一個或多個數據庫表啟用SQL緩存依賴。
            
             可以使用框架中的SqlCacheDependencyAdmin類來配置SQL數據庫支持拉SQL緩存依賴,由于調用該類的方法需要創建表、存儲過程、trigger,出于安全考慮,Asp.net進程并不應該被賦予這些權限,而是通過一個命令行工具來使用此類。
             aspnet_regsql 詳細信息訪問Msdn ASP.NET SQL Server 注冊工具 (Aspnet_regsql.exe)

             簡要步驟: 1、啟用特定數據庫的SQL緩存依賴。
             aspnet_regsql -c "Data Source=localhost;integrated Security=True;Initial Catalog=Pubs" -ed
                                2、啟用特定表的SQL緩存依賴。
             aspnet_regsql -c "Data Source=localhost;integrated Security=True;Initial Catalog=Pubs" -ed -t Titles

       2、必須在Web配置文件中配置SQL緩存依賴。
             <!-- caching section group -->
                <caching>
                <sqlCacheDependency enabled = "true" pollTime = "1000" >   //通過pollTime 的設置,定時拉數據庫的修改
                    <databases>
                      <add name="Northwind"
                         connectionStringName="NorthwindConnectionString1"
                       pollTime = "1000"
                      />
                    </databases>
                </sqlCacheDependency>
                </caching>

      a、 對頁面輸出緩存使用拉SQL緩存依賴:<%@ OutputCache%>指令指定sqlDependency屬性值:庫名和表名(Mydatabase:Mytable);
      
       b、對DataSource控件使用拉SQL緩存依賴:為DataSource控件sqlDependency屬性指定值:庫名和表名(Mydatabase:Mytable);

       c、對Cache對象使用拉SQL緩存依賴:
      
       void Page_Load()
        {
             DataTable dt=(DataTable)Cache["dtkey"];
              if(dt==null)
                {
                      dt=getdtFromDB();   //此處調用方法從數據庫中返回數據項DataTable
                      SqlCacheDependency sqlDepend=new SqlCacheDependecy("Mydatabase","Mytable");
                      Cache.Insert("dtKey",dt,sqlDepend);
                 }
                GridView1.DataSource=dt;
                GridView1.DataBind();
        }
         private DataTable getdtFromDB()
       {
          //略......
        }
      
       使用推SQL緩存依賴

       通過Service Broker可以在數據庫中的數據變更時自動給應用程序發送一個消息。
       好處:Asp.net應用程序不必定時拉數據庫的修改。
       缺點:查詢類型有諸多限制(如必須使用兩部分的表明:abo.mytabel,查詢必須包含一個顯示的列名表明:不能使用*,不能引用視圖、臨時表等,不能包含子查詢、外連接、子連接,不能引用大對象、不能使用DISTINCT、COMPUTE、COMPUTE BY、INSERT關鍵字、不能包含許多聚合函數 等等)

       1.為推SQL緩存依賴配置數據庫
       啟用Ms SQL Server 2005 Service Broker:
       a、可以通過:Select name ,is_broker_enabled from sys_databases,查詢是否對特定的數據庫激活。
       b、通過:Alter Database MyBase Set ENABLE_BROKER,啟用。
       c、為本地AspNet帳號賦予需要的權限,如:Grant Subscribe Query Notifications To “yourserver/Aspnet”

       2.為推SQL緩存依賴配置應用程序
       void Application_Start(object sender, EventArgs e)
       {
             string conString=WebConfigurationManager.ConnectionStrings["MyContention1"].ConnectionString;
             SqlDependency.Start(conString);
             HttpContext context=HttpContext.Current;
             context.Cache.Insert(
             "key",DateTime.Now,null,DateTime.MaxValue,Cache.NoSlidingExpiration,CacheItemPriority.NotRemovable,null
            );
        }

      a、對頁面輸出緩存使用推SQL緩存依賴:
       當緩存整個Asp.net頁面時,可以使用推Sql緩存依賴。如果包含在頁面上的任何Sql命令的結果有變動,頁面就會自動從緩存中過期。
       SqlCommand對象包含一個NotificationAutoEnlist屬性,該屬性默認值為true。當NotificationAutoEnlist啟用時,頁面和命令間自動創建一個推緩存依賴。注意SqlDataSource的SelectCommand必須符合查詢要求。
      
    b、對DataSource控件使用推SQL緩存依賴:
       只需要設置SqlcacheDependency屬性即可。設置SqlCacheDependency=“CommandNotification”
      
    c、對Cache對象使用推SQL緩存依賴:
       void Page_Load()
        {
             DataTable dt=(DataTable)Cache["dtkey"];
              if(dt==null)
                {
                      string conString=WebConfigurationManager.ConnectionStrings["MyContention1"].ConnectionString;
                      SqlDatadapter dad=new SqlDataAdapter("Select a,b From dbo.Mytable",conString); //注意查詢符合要求
                      SqlCacheDependency sqlDepend=new SqlCacheDependecy(dad.SelectCommand);
                      dt=new DataTable();
                      dad.Fill(dt);
                      Cache.Insert("dtKey",dt,sqlDepend);
                 }
                GridView1.DataSource=dt;
                GridView1.DataBind();
        }
       注意,SqlCacheDependency類的示例被創建了。一個SqlCommand對象被傳遞給SqlCacheDependency類的構造函數。如果SqlCommand的結果變化了,則這個DataTable會自動從緩存中失效。這些命令的順序很重要。必須在執行該命令之前創建SqlCacheDependency對象。如果在創建SqlCacheDependency對象之前調用Fill()方法,則依賴會被忽略。

       至此,有關緩存的總結,已經結束,本章只包含了一些知識要點,具體應用還要是情況對待。
轉自于:http://www.49028c.com/wenanry/archive/2008/08/13/1267028.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
www.日韩av.com| 亚洲午夜未删减在线观看| 欧美在线视频在线播放完整版免费观看| 亚洲一区免费网站| 亚洲国产精品一区二区三区| 69**夜色精品国产69乱| 久久久国产视频91| 成人午夜一级二级三级| 亚洲成人免费在线视频| 欧美一级黄色网| 日韩欧美亚洲一二三区| 亚洲国产精品热久久| 亚洲一区二区久久久久久久| 精品久久久久久久久久国产| 日韩最新中文字幕电影免费看| 亚洲精品国产品国语在线| 亚洲综合中文字幕在线| 国产欧美日韩精品在线观看| 国产精品18久久久久久首页狼| 国产成人精品久久二区二区| 日韩精品极品毛片系列视频| 亚洲一区二区黄| 日韩成人在线播放| 国产一区二区丝袜| 夜夜嗨av一区二区三区四区| 日韩亚洲在线观看| 国产精品视频网| 久久久噜噜噜久久久| 国产一区二区三区丝袜| 91精品啪aⅴ在线观看国产| 中文字幕精品久久久久| 日韩一级裸体免费视频| 欧美日韩视频免费播放| 黑人极品videos精品欧美裸| 亚洲黄色www网站| 亚洲韩国欧洲国产日产av| 久久久www成人免费精品| 狠狠躁天天躁日日躁欧美| 精品亚洲一区二区三区在线观看| 92看片淫黄大片欧美看国产片| 成人免费看吃奶视频网站| 久久久久久com| 欧美在线观看一区二区三区| 亚洲视频日韩精品| 91久久久久久国产精品| 日韩一区二区三区国产| 久久亚洲精品网站| 色多多国产成人永久免费网站| 亚洲综合中文字幕68页| 91久久精品久久国产性色也91| 亚洲激情视频在线播放| 国产精品美女网站| 久久久久日韩精品久久久男男| 日韩在线观看网站| 精品国产一区二区三区久久狼5月| 久青草国产97香蕉在线视频| 中文字幕亚洲综合久久筱田步美| 国产精品影院在线观看| 欧美国产日韩免费| 亚洲夜晚福利在线观看| 日韩激情av在线播放| 日韩av在线天堂网| 亚洲va国产va天堂va久久| 日韩免费电影在线观看| 91在线免费网站| 国产精品久久久久久久久久久不卡| 北条麻妃一区二区三区中文字幕| 国产999在线观看| 中文字幕av一区中文字幕天堂| 欧洲日本亚洲国产区| 成人h猎奇视频网站| 国产在线观看一区二区三区| 日本午夜精品理论片a级appf发布| 国产成人一区三区| 亚洲理论在线a中文字幕| 97激碰免费视频| 欧美日韩美女在线观看| 国产成人avxxxxx在线看| 成人日韩在线电影| 91久久久久久| 欧美制服第一页| 精品久久久久久亚洲精品| 日韩大片免费观看视频播放| 欧美激情视频一区二区| xxx欧美精品| 欧美在线一级va免费观看| 欧美精品久久久久a| 国内揄拍国内精品少妇国语| 国产成人福利夜色影视| 日韩的一区二区| 欧美俄罗斯性视频| 欧美又大又硬又粗bbbbb| 欧美激情图片区| 亚洲电影免费观看高清完整版在线| 亚洲国产另类久久精品| 久久国产一区二区三区| 亚洲欧美色婷婷| 亚洲人成免费电影| 成人字幕网zmw| 亚洲福利视频在线| 久久久久北条麻妃免费看| 国产日韩av在线播放| 欧美在线激情视频| 亚洲视频电影图片偷拍一区| 国产精品福利在线观看| 亚州av一区二区| 久久久av电影| 日本欧美一级片| 精品香蕉在线观看视频一| 中文字幕av日韩| 亚洲成人久久久久| 国产精品扒开腿爽爽爽视频| 精品视频一区在线视频| 欧美黑人xxxx| 欧美高清一级大片| 97av视频在线| 欧美日韩性视频| 欧美在线观看视频| 精品国产乱码久久久久酒店| 欧美一区二区三区……| 成人中文字幕+乱码+中文字幕| 久久久久久亚洲精品中文字幕| 秋霞午夜一区二区| 日韩av成人在线观看| 国产欧美日韩综合精品| 午夜精品一区二区三区在线播放| 精品欧美国产一区二区三区| 日韩精品久久久久| 日本精品视频在线| 欧美猛交ⅹxxx乱大交视频| 欧美性xxxx极品hd欧美风情| 欧美色道久久88综合亚洲精品| 精品国产依人香蕉在线精品| 欧美中文在线字幕| 久久亚洲一区二区三区四区五区高| 欧美激情综合色| 国产精品自产拍在线观看中文| 91高清视频免费观看| 69久久夜色精品国产7777| 日韩av在线电影网| 中文字幕av一区二区| 亚洲高清福利视频| 欧美激情视频一区二区| 91网站在线看| 日产日韩在线亚洲欧美| 国产成人极品视频| 欧美洲成人男女午夜视频| 亚洲欧美三级伦理| 欧美激情三级免费| 亚洲日韩中文字幕| 亚洲精品国产品国语在线| 亚洲精品美女在线观看| 久久久伊人日本| 97在线视频观看| 国产一区二区黑人欧美xxxx| 国产精品96久久久久久| 欧美成人精品在线视频| 美女福利精品视频| 亚洲精品国产美女| 美日韩精品视频免费看| 久久久精品久久久久| 97在线视频一区| 2019中文字幕免费视频| 中文字幕av一区二区|