ASP.NET頁面輸出緩存
最近因項目要求,需要研究ASP.NET緩存,可是查閱了書本,msdn,網(wǎng)上后有點失望,真是天下文章一大抄啊,大家講來講去都是那么幾點,沒有條理,沒有重點,也沒有心得,所以我決定自己來寫一篇,當(dāng)然,我是沒有能力來改變這一現(xiàn)象的,只是寫來自己備忘罷了。
首先有幾點要說明:
1.個人認(rèn)為緩存只有兩種:ASP.NET頁面輸出緩存與應(yīng)用程序數(shù)據(jù)緩存。一般大家也是這么認(rèn)為的,但是有另外一部份人卻把這兩個部份分了又分,搞出三五種出來。這就讓人感覺很多余了。
2.所謂控件緩存,其實是用戶控件緩存??赡苁俏依斫庥袉栴},我一開始還以為那種html控件,web控件也可以進(jìn)行緩存的。所以說定義名稱要定義清楚。
3.實現(xiàn)緩存有兩種方式:在aspx頁面的頂部寫頁處理指令或者在cs代碼里寫代碼(又叫緩存API),一種是靜態(tài)設(shè)置,一各是動態(tài)設(shè)置。網(wǎng)上總有些人喜歡說來說去又不總結(jié)清楚,搞的人很煩。
4.實際上只要用到了緩存就一定有緩存依賴。只是有些不那么明顯。在我看的文章里一般都把緩存依賴單獨作為一章講解,這是好事,因為在緩存的高級技術(shù)里緩存依賴是很重要的,但這并不代表有些緩存就沒有緩存依賴。
好了,下面言歸正傳。我只講常用的東東。
ASP.NET頁面輸出緩存。其實用戶控件緩存跟它沒有大的區(qū)別,只有一個location不能使用,在這里就一并講了吧。
page指令:
- <%@ OutputCache Duration="10" VaryByParam="*" VaryByControl="txtInput" %>
OutputCache是指令名。Duration是緩存時長,單位是秒。VaryByParam是跟據(jù)什么進(jìn)行緩存。有兩個特殊的值:none表示不隨任何參數(shù)的不同而緩存,就是只緩存一個版本,表示隨任何參數(shù)的不同而緩存,表示只要參數(shù)發(fā)生變化,就緩存一個新版本。VaryByControl是跟據(jù)控件名進(jìn)行緩存。這里的控件是指一般的服務(wù)器控件,不能是用戶控件,不然會出現(xiàn)意想不到的結(jié)果。
緩存API:
雖然ASP.NET頁面輸出緩存與用戶控件緩存在頁面指令方面差不多,但在api上面有所區(qū)別
頁面緩存api:
映射的是System.Web.HttpCachePolicy類。
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(3));
***句對應(yīng)的是Location,是說緩存在哪,public是哪里都緩存,nocache是都不緩存,private是客戶端緩存,還有其它幾個選項。比較關(guān)注的是:客戶端,代理服務(wù)器,服務(wù)器。
第二句對應(yīng)的是Duration,是說緩存時長,這是個絕對時間,是說到了那個時就是取消緩存。Response.Cache.VaryByParams["none"] = true;
對應(yīng)的是VaryByParam用中括號括起參數(shù),中間可用分號分隔多個參數(shù),true表示啟用此參數(shù)。沒有對應(yīng)VaryByControl的。
Response.Cache.SetSlidingExpiration(true);
當(dāng)用了這一句的時候,所有緩存設(shè)置都不啟作用了,原因是這個屬性是用給代理服務(wù)器之類的處于瀏覽器和Web服務(wù)器之間的緩存使用的,而不是給Web服務(wù)器本身的.是特意設(shè)計成這樣的.Response.Cache.SetNoServerCaching(),表示取消當(dāng)前所有服務(wù)器緩存。
【編輯推薦】