頁面緩存
使用OutputCache指令,。
<%@ OutputCache Duration="3600"
Location="Any"
VaryByCustom="browser"
VaryByParam="RequestID" %>
其中Duration和VaryByParam特性是必須的,。
Location控制頁面緩存的位置
Duration允許我們控制頁面在緩存中生存的時(shí)間(單位是秒)
VaryByParam允許我們緩存頁面的不同版本,。在上面的例子中,VaryByParam設(shè)為了RequestID,,所以ASP.NET使用RequestID參數(shù)的不同值,,這些值或者是在HTTP GET的查詢字符串中傳入,或者是在HTTP POST的參數(shù)中傳入,??梢酝ㄟ^檢查RequestID參數(shù)的值讓應(yīng)用程序區(qū)分不同的用戶;通過在頁面的OutputCache指令中放置VaryByParam="RequestID",,可以讓ASP.NET為每個(gè)用戶緩存頁面的不同版本,。
如果不想根據(jù)參數(shù)的值緩存頁面的不問版本,那么只要把VaryByParam設(shè)為none。
也可以要求ASP.NET為每個(gè)可能的參數(shù)組合緩存頁面的一個(gè)版本,。為此,,可把VaryByParam設(shè)為*。
VaryByHeader和VaryByCustom特性與VaryByParam的相似之處在于,,它們?cè)试S指定何時(shí)應(yīng)創(chuàng)建頁面新的緩存版本,。
VaryByHeader允許我們根據(jù)由分號(hào)分隔的HTTP頭的列表末緩存頁面的不向版本。
VaryByCustom當(dāng)設(shè)為browser時(shí),,允許我們根據(jù)瀏覽器的名稱和主版本信息緩存不同版本,。也可以把它設(shè)為一個(gè)自定義方法的名稱,從而實(shí)現(xiàn)我們自己的邏輯,,控制緩存的版本,。
片斷緩存
可以利用用戶控件將頁面分段,在ascx文件中寫入緩存的語句,,而不在aspx文件中寫緩存語句,,這樣ASP.NET就可以只緩存ascx片斷的輸出了。一般像頁眉或頁腳基本上都是一樣的,,就不需要重新加載,。但是如果其中有動(dòng)態(tài)變化的數(shù)據(jù)就不能對(duì)其進(jìn)行緩存,因?yàn)橐坏┍痪彺婧蟪绦蚓筒粫?huì)再創(chuàng)建它的實(shí)例來更新數(shù)據(jù)顯示,,只有等到生存期過期才行,,所以對(duì)于這種情況就不適于用頁面片斷緩存。
注意:
一,、注意片段緩存不支持Location特性,;緩存頁面片段惟一合法的地方是web服務(wù)器。這是因?yàn)槠尉彺嬖贏SP.NET中是新的功能,,所以瀏覽器和代理服務(wù)器不支持,。
二、片段緩存有另外一個(gè)在頁面緩存中沒有的特性——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ì)象一樣簡單,。每個(gè)應(yīng)用程序只有一個(gè)Cache對(duì)象——這意味著使用Cache對(duì)象存儲(chǔ)在緩存中的數(shù)據(jù)是應(yīng)用程序級(jí)別的數(shù)據(jù)。使事情更為簡單的是,,Page類的Cache屬性使應(yīng)用程序的Cache對(duì)象實(shí)例能在代碼中使用,。
通過Cache對(duì)象緩存的數(shù)據(jù)存儲(chǔ)在應(yīng)用程序的內(nèi)存中,。這意味著該數(shù)據(jù)的生存期不會(huì)超過應(yīng)用程序的重啟(事實(shí)上,這和存儲(chǔ)在Application與Session對(duì)象中的數(shù)據(jù)一樣,,除非使用StateService或SQL State會(huì)話模式存儲(chǔ)Session數(shù)據(jù)),。
具體的使用和語法與Session和Application一樣,。轉(zhuǎn)換回來的時(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該緩存項(xiàng)在緩存中一直保留到某個(gè)事件發(fā)生時(shí)為止,。
使用CacheItemPriority來指定緩存數(shù)據(jù)的優(yōu)先級(jí),,以便在緩存被填滿的時(shí)候刪除那些優(yōu)先級(jí)低的數(shù)據(jù),。
DateTime dt = new DateTime(DateTime.Now.Year,12,31);
Cache.Add("MembersDataSet",dsMembers,null,
dt,TimeSpan.Zero,
CacheItemPriority.Normal,null);
第一個(gè)參數(shù)是引用緩存對(duì)象的鍵,第二個(gè)參數(shù)是要緩存的對(duì)象,。第三個(gè)參數(shù)是null(表明沒有相關(guān)性),。
第四和第五個(gè)參數(shù)是絕對(duì)的過期時(shí)間和彈性的過期時(shí)間。這里,,我們指定緩存應(yīng)在當(dāng)前年份的最后一天過期(dt),。我們想指定沒有彈性的過期時(shí)間,所以第五個(gè)參數(shù)使用TimeSpan.Zero,。第六個(gè)參數(shù)使用System.Web.Caching.CacheItemPriority枚舉中的一個(gè)值,,把優(yōu)先級(jí)設(shè)為Normal,。
指定一個(gè)5分鐘的彈性過期時(shí)間,沒有指定絕對(duì)過期時(shí)間
Cache.Add("MembersDataSet",dsMembers,null,
DateTime.MaxValue,TimeSpan.FromMinutes(5),
CacheItemPriority.Normal,null);
添加一個(gè)相關(guān)性,。在這個(gè)例子中,,過期時(shí)間也取決于一個(gè)文件的修改,即test.xml文件:
CacheDependency dep = new CacheDependency(@"C:/test.xml");
Cache.Add("MembersDataSet",dsMembers,dep,
DateTime.MaxValue,TimeSpan.FromMinutes(5),
CacheItemPriority.Normal,null);
過期時(shí)間取決于緩存中另一項(xiàng)的修改:
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);
最后一個(gè)參數(shù)是CacheItemRemovedCallback類型的,,允許我們?cè)诰彺骓?xiàng)從緩存中刪除時(shí)要求通知,,可以編寫一個(gè)自定義的方法(像這里的ItemRemovedCallback()方法),然后在第7個(gè)參數(shù)中指定該方法:
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));
第一個(gè)參數(shù)是在緩存中存儲(chǔ)緩存項(xiàng)時(shí)使用的鍵,,第二個(gè)是存儲(chǔ)的對(duì)象本身,,第三個(gè)是緩存項(xiàng)刪除的原因。 |
|