ASP.NET學習筆記–緩衝技術

來源:互聯網
上載者:User
 

緩衝技術

一、頁面緩衝
整頁緩衝
概念:整頁緩衝是最簡單的緩衝形式,頁是常用的緩衝形式。它將整個頁面進行緩衝。
文法:
<%@ OutputCache Duration="60" VaryByParam="id" VaryByCustom="browser" %>
應用情況
不需要頻繁更新資料的頁面   佔用大量時間和資源才能

整頁緩衝的主要屬性

Duration

必需屬性。頁面應該被緩衝的時間,以秒為單位。必須是正整數。

Location

指定應該對輸出進行緩衝的位置。
如果要指定該參數,則必須是下列選項之一:
Any——
預設值。意味著頁面的輸出可以緩衝在用戶端瀏覽器,緩衝在任何“下遊”的用戶端(如Proxy 伺服器),或緩衝在Web伺服器本身
Client——
指明輸出緩衝只能儲存在發出請求的用戶端(即瀏覽器)的本機快取中
Downstream——
指明輸出緩衝能儲存在任何支援HTTP1.1緩衝的裝置(如Proxy 伺服器)中
None——
指明該頁面禁用輸出緩衝
Server(ServerAndClient)——
指明輸出緩衝將儲存在Web伺服器上

VaryByParam

該屬性是以分號分隔的字串變數,以其中每一個變數作為參數傳遞的頁都將被作為緩衝處理。"none"表示不隨任何參數變化,"*" 根據所有參數變化
注意:如果沒有VaryByControl,該屬性是必需的

VaryByControl

該屬性是以分號分隔的字串變數,用來該變使用者控制項的輸出緩衝,這些字串代表使用者控制項中聲明的伺服器控制項ID
注意:如果沒有VaryByParam,該屬性是必需的

VaryByCustom

用於自訂輸出緩衝要求,他允許在global.asax中指定自訂變動,如果該屬性值是browser,則緩衝將隨瀏覽器名稱和主要資訊版本資訊的不同而異

VaryByHeader

基於指定的標題中的變動改變緩衝條目。

樣本:
在頁面代碼的指令區添加如下代碼
<%@ OutputCache Duration="60" VaryByParam="id" VaryByCustom="browser" %>
說明:VaryByParam屬性的id只從上一個頁面請求時的參數Response.Rediect("User.aspx?id="+id);

頁面部分緩衝(緩衝後替換)
概念:所謂緩衝後替換就是將整個頁面緩衝,然後替換頁面中不需要緩衝的部分
實現控制項——Subsitutioin控制項
1
、添加整頁緩衝指令
<%@ OutputCache Duration="120" VaryByParam="none" %>
2
、在不需要緩衝的部分添加Subsitution控制項
<asp:Subsitution ID="Subsitution1" runat="server" MethodName="GetNum" />
3
、在後置代碼中編寫Subsitutioin控制項的MethodName屬性方法
protected static string GetNum(HttpContext context){
DataTable dt = GetTicketsDataTable(3);   return dt.Rows[0]["num"].ToString();}
注意:
Subsitutioin
控制項 MethodName屬性所調用的方法必需滿足三個條件
(1)
必需是靜態(static)方法(2)傳回型別必需是string(3)參數類型必需是HttpContext類型
二、資料緩衝(應用程式緩衝)
概念:應用程式緩衝是用來儲存與應用程式相關的對象,主要是由Cache類來實現的。
命名控制項
using System.Web.Caching;
添加緩衝
1
、指定鍵和值
   Cache["key"] = "value";
這種方法添加緩衝最方便,但是如果需要設定緩衝的有效期間、依賴項等特性,它就變得無能為力了
2
、使用Add()方法——只用於在ASP.NET緩衝中添加新的快取項目(如果用它覆蓋現有的快取項目,則會失敗)
   Cache.Add("key","value",CacheDependency,DateTime,TimeSpan,CacheItemPriority,CacheItemRemovedCallbac);
  
這種方法適用於需要設定緩衝的有效期間、依賴項等特性的緩衝,但是要注意它的7個參數必須寫完整才會生效,所以靈活性不夠好。
  
參數說明:
  
第一個參數:key——表示引用緩衝對象的鍵(鍵)
  
第二個參數:value——表示要緩衝的對象(值)
  
第三個參數:CacheDependency——表示添加依賴項(允許指定一個檔案或緩衝鍵。如果檔案發生變化,對象就被刪除。如果緩衝鍵發生變化,對象也被刪除)
  
第四個參數:DateTime——表示絕對到期時間(指明快取資料到期的時間)
  
第五個參數:TimeSpan——表示可調到期時間又叫彈性的到期時間。指明快取資料在上一次訪問後可以在緩衝中保留多長時間(也就是說在相對到期時間內,以相對到期時間剩餘時間點為起點再進行相對到期時間。TimeSpan.Zero表示沒有指定可調到期時間)()
  
第六個參數:CacheItemPriority——表示優先順序,當在緩衝被填滿的時候刪除那些優先順序低的資料
  
第七個參數:CacheItemRemovedCallbac——表示回調自訂的方法(樣本:可以在快取項目從緩衝中刪除時要求通知),它的類型是CacheItemRemovedCallback類型的
  
  
樣本一:(指定一個5分鐘絕對到期時間)
         Cache.Add("key","value",null,DateTime.Now.AddMinutes(5),TimeSpan.Zero,CacheItemPriority.Normal,null);   //
建立一個指定5分鐘絕對到期時間的緩衝
  
  
樣本二:(指定一個5分鐘的彈性到期時間,沒有指定絕對到期時間)
       Cache.Add("key","value",null,DateTime.MaxValue,TimeSpan.FromMinutes(5),CacheItemPriority.Normal,null);    //
建立一個指定5分鐘彈性到期時間的緩衝
  
樣本三:(到期時間也取決於一個檔案的修改)
  //
到期時間取決於test.xml檔案修改。也就是說當test.xml檔案內容修改時此緩衝就會到期
     CacheDependency dependency = new CacheDependency("C:\\test.xml");
     //
建立一個依賴檔案修改而到期的緩衝
     Cache.Add("key","value",dependency,DateTime.MaxValue,TimeSpan.FromMinutes(5),CacheItemPriority.Normal,null);
  
樣本四:(到期時間取決於緩衝中另一項的修改)
         Cache.Add("key1","value",null,DateTime.MaxValue,TimeSpan.Zero,CacheItemPriority.Normal,null); //
當緩衝key1的值修改時,緩衝key2就會到期
     //
添加愛到數組中
     String[] dependencyKeys = new String[1];
     dependencyKeys[0] = "key1";
     CacheDependency dependency = new CacheDependency(null, dependencyKeys);
     //
建立一個依賴另一個緩衝修改而到期的緩衝
     Cache.Add("key2","value",dependency,DateTime.MaxValue,TimeSpan.Zero,CacheItemPriority.Normal,null);
    
樣本五:(緩衝到期後回調方法)
     public void ItemRemovedCallback(String key, Object value, CacheItemRemovedReason reason){} //
緩衝到期將要調用的方法
     //
建立一個當指定5分鐘的彈性到期時間後調用ItemRemovedCallback方法的緩衝
     Cache.Add("key","value",null,DateTime.MaxValue,TimeSpan.FromMinutes(5),CacheItemPriority.Normal,new CacheItemRemovedCallback(this.ItemRemovedCallback));

優先順序值順序

含義

High

設為此優先順序的快取項目是最不可能在記憶體不足時被刪除的

AboveNormal

設為此優先順序的快取項目比優先順序為Normal或以下的快取項目更優先保留

Normal

設為此優先順序的快取項目比優先順序為BelowNormal和Low的快取項目更優先保留

BelowNormal

這是倒數第二級的優先順序;設為此優先順序的快取項目只比優先順序設為Low的快取項目更優先保留

Low

設為此優先順序的快取項目是最有可能在記憶體不足時被刪除的

Default

快取項目的優先順序的預設值是Normal

NotRemovable

當快取項目設為此優先順序時,是在告訴ASP.NET即使是記憶體不足,也不要從緩衝中刪除它

3、使用Insert()方法——用於覆蓋ASP.NET緩衝中現有的快取項目。   這種方法可以實現多種方式的方法重載,使用起來比較靈活(但主要用法和Cache.Add用法差不錯)

Cache.Insert("key","value");


    
樣本一:(索引值添加)
       Cache.Insert("key1","value1");
      
樣本二:(添加依賴項的緩衝)
   Cache.Insert("key","value",System.Web.Caching.CacheDependecy(null,dependencies));
      
樣本三:(添加有效到期時間的)
       Cache.Insert("key","value",DateTime.Now.AddMinutes(1d),System.Web.Caching.Cache.NoSlidingExpiration);
  
樣本四:(添加優先順序的緩衝)
     Cache.Insert("key","value",null,System.Web.Caching.Cache.NoSlidingExpiration,System.Web.Caching.Cache.NoSlidingExpiration,System.Web.Caching.CacheItemPriority.High,null);
4
、檢索緩衝
    if (Cache["key"] != null)
    {    //
處理語句 }
5
、移除緩衝
   (1)
自動移除
     
出現緩衝已滿、或到期、依賴項更改等情況時,快取項目就會自動移除
   (2)
顯示移除
      Cache.Remove("key");

三、禁止使用緩衝
1
、用戶端取消
   <html>    <head>
     <meta http-equiv="Expires" CONTENT="0">
     <meta http-equiv="Cache-Control" CONTENT="no-cache">
     <meta http-equiv="Pragma" CONTENT="no-cache">
   </head> <body> </body>   </html>
2
、伺服器具端取消
   Response.Buffer = true;
   Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
   Response.Cache.SetExpires(DateTime.Now.AddDays(-1));
   Response.Expires = 0;
   Response.CacheControl = "no-cache";
   Response.Cache.SetNoStore();
3
、Global裡面: 
   protected void Application_BeginRequest(Object sender,EventArgs e)     { 
        HttpContext.Current.Response.Cache.SetNoStore();     }
     <%@ OutPutCache Location="None"%> //
禁止後退
  
說明:Global 申請全域變數,一般定義在模組中,不可在程式檔案中定義
         public
可以在模組中定義,也可在程式檔案中定義。
4
、頁面基類:
   public class PageBase : Page   { 
       public PageBase(){} 
       protected override OnLoad(EventArgs e )     { 
          Response.Cache.SetNoStore(); 
          base.OnLoad(); 
       }     }
5
、最簡單的辦法 :在URL後面隨機的加一些沒用的參數(IE是用過URL來控制緩衝的,這樣就解決了)
  
樣本:http://xxx/xxx/xxx.jsp?p=xxx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.