ASP.NET緩存頁(yè)面
很早就想寫(xiě)多點(diǎn)關(guān)于ASP.NET緩存頁(yè)面的東西,一來(lái)是為了自己可以更方面的查詢,二來(lái)當(dāng)然了更方面大家拉。哈,閑話少說(shuō),今天剛好有空就拼湊點(diǎn)出來(lái)
緩存頁(yè)面
使用OutputCache指令
- <%@OutputCacheDuration="3600"
- Location="Any"
- VaryByCustom="browser"
- VaryByParam="RequestID"%>
其中Duration和VaryByParam特性是必須的。
VaryByParam允許我們緩存頁(yè)面的不同版本。在上面的例子中,VaryByParam設(shè)為了RequestID,所以ASP.NET使用RequestID參數(shù)的不同值,這些值或者是在HTTP GET的查詢字符串中傳入,或者是在HTTP POST的參數(shù)中傳入??梢酝ㄟ^(guò)檢查RequestID參數(shù)的值讓?xiě)?yīng)用程序區(qū)分不同的用戶;通過(guò)在頁(yè)面的OutputCache指令中放置VaryByParam="RequestID",可以讓ASP.NET為每個(gè)用戶緩存頁(yè)面的不同版本。
如果不想根據(jù)參數(shù)的值緩存頁(yè)面的不問(wèn)版本,那么只要把VaryByParam設(shè)為none。
也可以要求ASP.NET為每個(gè)可能的參數(shù)組合緩存頁(yè)面的一個(gè)版本。為此,可把VaryByParam設(shè)為*。
VaryByHeader和VaryByCustom特性與VaryByParam的相似之處在于,它們?cè)试S指定何時(shí)應(yīng)創(chuàng)建頁(yè)面新的緩存版本。
VaryByHeader允許我們根據(jù)由分號(hào)分隔的HTTP頭的列表末緩存頁(yè)面的不向版本。
VaryByCustom當(dāng)設(shè)為browser時(shí),允許我們根據(jù)瀏覽器的名稱和主版本信息緩存不同版本。也可以把它設(shè)為一個(gè)自定義方法的名稱,從而實(shí)現(xiàn)我們自己的邏輯,控制緩存的版本。
片斷緩存
可以利用用戶控件將頁(yè)面分段,在ascx文件中寫(xiě)入緩存的語(yǔ)句,而不在aspx文件中寫(xiě)緩存語(yǔ)句,這樣ASP.NET就可以只緩存ascx片斷的輸出了。一般像頁(yè)眉或頁(yè)腳基本上都是一樣的,就不需要重新加載。但是如果其中有動(dòng)態(tài)變化的數(shù)據(jù)就不能對(duì)其進(jìn)行緩存,因?yàn)橐坏┍痪彺婧蟪绦蚓筒粫?huì)再創(chuàng)建它的實(shí)例來(lái)更新數(shù)據(jù)顯示,只有等到生存期過(guò)期才行,所以對(duì)于這種情況就不適于用頁(yè)面片斷緩存。
注意:
一、注意片段緩存不支持Location特性;緩存頁(yè)面片段惟一合法的地方是web服務(wù)器。這是因?yàn)槠尉彺嬖贏SP.NET中是新的功能,所以瀏覽器和代理服務(wù)器不支持。
二、片段緩存有另外一個(gè)在頁(yè)面緩存中沒(méi)有的特性——VaryByControl。VaryByControl特性允許指定一個(gè)由分號(hào)分隔的字符串列表,代表用戶控件內(nèi)使用的控件的名稱;ASP.NET將針對(duì)值的每個(gè)不同的組合生成用戶構(gòu)件的一個(gè)緩存版本。
數(shù)據(jù)緩存
低級(jí)API是Cache類,它位于ASP.NET中的System.web.Caching命名空間,可以用它緩存生成很耗費(fèi)資源的數(shù)據(jù)。Cache類的使用和Session與Application對(duì)象一樣簡(jiǎn)單。每個(gè)應(yīng)用程序只有一個(gè)Cache對(duì)象——這意味著使用Cache對(duì)象存儲(chǔ)在緩存中的數(shù)據(jù)是應(yīng)用程序級(jí)別的數(shù)據(jù)。使事情更為簡(jiǎn)單的是,Page類的Cache屬性使應(yīng)用程序的Cache對(duì)象實(shí)例能在代碼中使用。
通過(guò)Cache對(duì)象緩存的數(shù)據(jù)存儲(chǔ)在應(yīng)用程序的內(nèi)存中。這意味著該數(shù)據(jù)的生存期不會(huì)超過(guò)應(yīng)用程序的重啟(事實(shí)上,這和存儲(chǔ)在Application與Session對(duì)象中的數(shù)據(jù)一樣,除非使用StateService或SQL State會(huì)話模式存儲(chǔ)Session數(shù)據(jù))。
具體的使用和語(yǔ)法與Session和Application一樣。轉(zhuǎn)換回來(lái)的時(shí)候需要注意對(duì)其進(jìn)行相應(yīng)類型的強(qiáng)制類型轉(zhuǎn)換。
這不是在ASP.NET緩存中添加緩存項(xiàng)的惟一方式。Cache對(duì)象有兩個(gè)方法Insert()方法和Add()方法,它們靈活性更高。它們的用法近似,但稍有不同:
Insert()方法用于覆蓋ASP.NET緩存中現(xiàn)有的緩存項(xiàng)。
Add()方法只用于在ASP.NET緩存中添加新的緩存項(xiàng)(如果用它覆蓋現(xiàn)有的緩存項(xiàng),則會(huì)失敗)。
每個(gè)方法都有7個(gè)參數(shù),而且兩個(gè)方法的參數(shù)相同。
在緩存某一項(xiàng)時(shí),可以指定它的相關(guān)性,告訴ASP.NET緩存頁(yè)面在緩存中一直保留到某個(gè)事件發(fā)生時(shí)為止。
【編輯推薦】