asp.net緩衝剖析

來源:互聯網
上載者:User

此文是轉載使用OutputCache指令。<%@ OutputCache Duration="3600"                Location="Any"                VaryByCustom="browser"                VaryByParam="RequestID" %>其中Duration和VaryByParam特性是必須的。Location控制頁面緩衝的位置
Location 含義
Any 預設值。意味著頁面的輸出可以緩衝在用戶端瀏覽器,緩衝在任何“下遊”的用戶端(如Proxy 伺服器),或緩衝在Web伺服器本身
Client 指明輸出緩衝只能儲存在發出請求的用戶端(即瀏覽器)的本機快取中
Downstream 指明輸出緩衝能儲存在任何支援HTTP1.1緩衝的裝置(如Proxy 伺服器)中
Server 指明輸出緩衝將儲存在Web伺服器上
None 指明該頁面禁用輸出緩衝
Duration允許我們控制頁面在緩衝中生存的時間(單位是秒)VaryByParam允許我們快取頁面面的不同版本。在上面的例子中,VaryByParam設為了RequestID,所以ASP.NET使用RequestID參數的不同值,這些值或者是在HTTP GET的查詢字串中傳入,或者是在HTTP POST的參數中傳入。可以通過檢查RequestID參數的值讓應用程式區分不同的使用者;通過在頁面的OutputCache指令中放置VaryByParam="RequestID",可以讓ASP.NET為每個使用者快取頁面面的不同版本。如果不想根據參數的值快取頁面面的不問版本,那麼只要把VaryByParam設為none。也可以要求ASP.NET為每個可能的參數組合快取頁面面的一個版本。為此,可把VaryByParam設為*。VaryByHeader和VaryByCustom特性與VaryByParam的相似之處在於,它們允許指定何時應建立頁面新的緩衝版本。VaryByHeader允許我們根據由分號分隔的HTTP頭的列表末快取頁面面的不向版本。VaryByCustom當設為browser時,允許我們根據瀏覽器的名稱和主要版本資訊緩衝不同版本。也可以把它設為一個自訂方法的名稱,從而實現我們自己的邏輯,控制緩衝的版本。片斷緩衝可以利用使用者控制項將頁面分段,在ascx檔案中寫入緩衝的語句,而不在aspx檔案中寫緩衝語句,這樣ASP.NET就可以只緩衝ascx片斷的輸出了。一般像頁首或頁尾基本上都是一樣的,就不需要重新載入。但是如果其中有動態變化的資料就不能對其進行緩衝,因為一旦被緩衝後程式就不會再建立它的執行個體來更新資料顯示,只有等到生存期到期才行,所以對於這種情況就不適於用頁面片斷緩衝。注意:一、注意片段快取不支援Location特性;快取頁面面片段惟一合法的地方是web伺服器。這是因為片段快取在ASP.NET中是新的功能,所以瀏覽器和Proxy 伺服器不支援。二、片段快取有另外一個在頁面緩衝中沒有的特性——VaryByControl。VaryByControl特性允許指定一個由分號分隔的字串列表,代表使用者控制項內使用的控制項的名稱;ASP.NET將針對值的每個不同的組合產生使用者構件的一個緩衝版本。資料緩衝低級API是Cache類,它位於ASP.NET中的System.web.Caching命名空間,可以用它緩衝產生很耗費資源的資料。Cache類的使用和Session與Application對象一樣簡單。每個應用程式只有一個Cache對象——這意味著使用CacheObject Storage Service在緩衝中的資料是應用程式層級的資料。使事情更為簡單的是,Page類的Cache屬性使應用程式的Cache對象執行個體能在代碼中使用。通過Cache對象緩衝的資料存放區在應用程式的記憶體中。這意味著該資料的生存期不會超過應用程式的重啟(事實上,這和儲存在Application與Session對象中的資料一樣,除非使用StateService或SQL State會話模式儲存Session資料)。具體的使用和文法與Session和Application一樣。轉換回來的時候需要注意對其進行相應類型的強制類型轉換。這不是在ASP.NET緩衝中添加快取項目的惟一方式。Cache對象有兩個方法Insert()方法和Add()方法,它們靈活性更高。它們的用法近似,但稍有不同:Insert()方法用於覆蓋ASP.NET緩衝中現有的快取項目。Add()方法只用於在ASP.NET緩衝中添加新的快取項目(如果用它覆蓋現有的快取項目,則會失敗)。每個方法都有7個參數,而且兩個方法的參數相同。在緩衝某一項時,可以指定它的相關性,告訴ASP.NET該快取項目在緩衝中一直保留到某個事件發生時為止。
相關性值 含義
CacheDependency 允許指定一個檔案或緩衝鍵。如果檔案發生變化,對象就被刪除。如果緩衝鍵發生變化,對象也被刪除。
DateTime 這是一個DataTime值,指明快取資料到期的時間(絕對到期時間)
TimeSpan 這是一個時間間隔,指明快取資料在上一次訪問後可以在緩衝中保留多長時間(彈性到期時間)
使用CacheItemPriority來指定快取資料的優先順序,以便在緩衝被填滿的時候刪除那些優先順序低的資料。
優先順序值 含義
High 設為此優先順序的快取項目是最不可能在記憶體不足時被刪除的
AboveNormal 設為此優先順序的快取項目比優先順序為Normal或以下的快取項目更優先保留
Normal 設為此優先順序的快取項目比優先順序為BelowNormal和Low的快取項目更優先保留
BelowNormal 這是倒數第二級的優先順序;設為此優先順序的快取項目只比優先順序設為Low的快取項目更優先保留
Low 設為此優先順序的快取項目是最有可能在記憶體不足時被刪除的
Default 快取項目的優先順序的預設值是Normal
NotRemovable 當快取項目設為此優先順序時,是在告訴ASP.NET即使是記憶體不足,也不要從緩衝中刪除它
DateTime dt = new DateTime(DateTime.Now.Year,12,31);Cache.Add("MembersDataSet",dsMembers,null,dt,TimeSpan.Zero,CacheItemPriority.Normal,null);第一個參數是引用緩衝對象的鍵,第二個參數是要緩衝的對象。第三個參數是null(表明沒有相關性)。第四和第五個參數是絕對的到期時間和彈性的到期時間。這裡,我們指定緩衝應在當前年份的最後一天到期(dt)。我們想指定沒有彈性的到期時間,所以第五個參數使用TimeSpan.Zero。第六個參數使用System.Web.Caching.CacheItemPriority枚舉中的一個值,把優先順序設為Normal。指定一個5分鐘的彈性到期時間,沒有指定絕對到期時間Cache.Add("MembersDataSet",dsMembers,null,                 DateTime.MaxValue,TimeSpan.FromMinutes(5),             CacheItemPriority.Normal,null);添加一個相關性。在這個例子中,到期時間也取決於一個檔案的修改,即test.xml檔案:CacheDependency dep = new CacheDependency(@"C:\test.xml");Cache.Add("MembersDataSet",dsMembers,dep,                 DateTime.MaxValue,TimeSpan.FromMinutes(5),             CacheItemPriority.Normal,null);到期時間取決於緩衝中另一項的修改:String[] dependencyKeys = new String[1];dependencyKeys[0] = "MembersChanged";CacheDependency dependency = new CacheDependency(null, dependencyKeys);Cache.Add("MembersDataSet",dsMembers,dependency,                 DateTime.MaxValue,TimeSpan.Zero,             CacheItemPriority.Normal,null);最後一個參數是CacheItemRemovedCallback類型的,允許我們在快取項目從緩衝中刪除時要求通知,可以編寫一個自訂的方法(像這裡的ItemRemovedCallback()方法),然後在第7個參數中指定該方法:        public void ItemRemovedCallback(String key, Object value, CacheItemRemovedReason reason)         {         }Cache.Add("MembersDataSet",dsMembers,dependency,                 DateTime.MaxValue,TimeSpan.FromMinutes(5),             CacheItemPriority.Normal,new CacheItemRemovedCallback(this.ItemRemovedCallback());第一個參數是在緩衝中儲存快取項目時使用的鍵,第二個是儲存的對象本身,第三個是快取項目刪除的原因。  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.