ASP.NET 提供三種主要形式的緩存:頁面緩存、用戶控件輸出緩存和緩存 API。
頁面輸出緩存作為最簡單的緩存形式,將已經生成的動/靜太頁面全部內容保存在服務器內容中。當再有請求時,系統將緩存中的相關數據直接輸出,直到緩存數據過期。在這個過程中,緩存不再要再次經過頁面處理生命周期。這樣可以縮短請求響應時間,提高應用程序性能。顯然,頁面輸出緩存適用於不需要頻繁更新數據,而占用大量時間和資源才能編譯生成的頁面。
實現頁面輸出緩存,通常可以用以下兩種方法:
一、使用@ OutputCache指令
使用@ OutputCache指令,能夠實現對頁面輸出緩存的一般性需要。@ OutputCache指令在ASP.NET頁或者頁中包含的用戶控件的頭部聲明。這種方式非常方便,只需幾個簡單的屬性設置,就能夠實現頁面的輸出緩存策略。
二、使用HttpCacheability類
該類主要包含用於設置緩存特定的HTTP標頭的方法和用於控制ASP.NET頁面輸出緩存的方法。與.NET Framework 1.x中的HttpCachePolicy類相比,.NET Framework 2.0中的HttpCachePolicy類得到了擴充和發展。
使用這兩種方法,我們可以實現下列功能:
1、使用參數對頁的各個版本進行緩存
使用 ASP.NET,您可以根據指定的 HTTP 標頭的值對某頁的多個版本進行緩存。當請求頁時,您可以指定按傳遞到應用程序的單個標頭、多個標頭或所有標頭進行緩存。
根據 HTTP 標頭值以聲明方式對某頁的各個版本進行緩存
A、 在 ASP.NET 頁中,在 @ OutputCache 指令中包括必需的 Duration 和 VaryByParam 或 VaryByControl 屬性。必須將 Duration 屬性設置為大於零的整數。如果希望只按 HTTP 標頭值進行緩存,則必須將 VaryByParam 屬性設置為“None”。
B、 在 @ OutputCache 指令中,包含 VaryByHeader 屬性,將其值設置為要作為改變緩存內容的依據的 HTTP 標頭的名稱。
下面的示例將頁緩存 60 秒,並根據隨 Accept-Language HTTP 標頭傳遞的值設置要緩存的頁的版本:
<%@ OutputCache Duration="60" VaryByParam="None" VaryByHeader="Accept-Language" %>
注意:如果要根據多個標頭改變緩存的內容,請以分號 (;) 作為分隔符包括標頭名稱的列表。如果要根據所有標頭值改變緩存的內容,請將 VaryByHeader 屬性設置為星號 (*)。
根據 HTTP 標頭值以編程方式對某頁的各個版本進行緩存
A、 在頁的 Page_Load 方法中,對頁的 Response 對象的 Cache 屬性調用 SetCacheability 和 SetExpires 方法。
B、 將 VaryByHeaders 屬性中的 HTTP 標頭值設置為 true。
下面的代碼示例演示如何為有不同的 Accept-Language HTTP 標頭值的請求,將某頁的多個版本緩存一分鐘之久。
protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
Response.Cache.VaryByHeaders["Accept-Language"] = true;
}
注意:如果要根據多個標頭改變緩存的內容,需要在 VaryByHeaders 屬性中設置多個值。如果要根據所有標頭改變緩存的內容,請將 VaryByHeaders["VaryByUnspecifiedParameters"] 設置為 true。