使用@ OutputCache指令
使用@ OutputCache指令,可以實現對頁面輸出緩存的通常性須要。@ OutputCache指令在ASP.NET頁或者頁中包含的用戶控件的頭部聲明。這種方式很是方便,只需幾個簡單的屬性設置,就可以實現頁面的輸出緩存 策略。@ OutputCache指令聲明代碼以下。
@ OutputCache指令代碼
<%@ OutputCache CacheProfile =" " NoStore= "True | False" Duration ="#ofseconds" Shared ="True | False" Location ="Any | Client | Downstream | Server | None | ServerandClient " SqlDependency ="database/table name pair | CommandNotification " VaryByControl ="controlname" VaryByCustom ="browser | customstring" VaryByHeader ="headers" VaryByParam ="parametername" %>
如上所示,在@ OutputCache指令中,共包括10個屬性,它們是CacheProfile、NoStore、Duration、Shared、 Location、SqlDependency、VaryByControl、VaryByCustom、VaryByHeader和 VaryByParam。這些屬性將對緩存時間、緩存項的位置、SQL數據緩存依賴等各方面進行設置。下面簡要介紹以上屬性的基本概念。
CacheProfile
用於定義與該頁關聯的緩存設置的名稱。是可選屬性,默認值爲空字符("")。須要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。在頁面中指定此屬性時,屬性值必須與Web.config文件<outputCacheSettings>配置 節下的outputCacheProfiles元素中的一個可用項的名稱匹配。若是此名稱與配置文件項不匹配,將引起異常。
NoStore
該屬性定義一個布爾值,用於決定是否阻止敏感信息的二級存儲。須要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。將此屬性設置爲true等效於在請求期間執行代碼「Response.Cache.SetNoStore();」。
Duration
用於設置頁面或者用戶控件緩存的時間。單位是秒。經過設置該屬性,可以爲來自對象的HTTP響應創建了一個過時策略,並將自動緩存頁或用戶控件輸出。須要注意的是,Duration屬性是必需的,不然將會引發分析器錯誤。
Shared
該屬性定義一個布爾值,用於肯定用戶控件輸出是否能夠由多個頁共享。默認值爲false。注意,包含在ASP.NET頁中的@ OutputCache指令不支持此屬性。
Location
用於指定輸出緩存項的位置。其屬性值是OutputCacheLocation枚舉值,它們是Any、Client、Downstream、None、 Server和ServerAndClient。默認值是Any,表示輸出緩存可用於全部請求,包括客戶端瀏覽器、代理服務器或處理請求的服務器上。須要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。
SqlDependency
該屬性標識一組數據庫/表名稱對的字符串值,頁或控件的輸出緩存依賴於這些名稱對。須要注意:SqlCacheDependency類監視輸出緩存所依賴 的數據庫中的表,所以,當更新表中的項時,使用基於表的輪詢將從緩存中移除這些項。當通知(在SQL Server 2005中)與CommandNotification值一塊兒使用時,最終將使用SqlDependency類向SQL Server 2005服務器註冊查詢通知。另外,SqlDependency屬性的CommandNotification值僅在ASP.NET頁中有效。控件只能將 基於表的輪詢用於@ OutputCache指令。
VaryByControl
該屬性使用一個分號分隔的字符串列表來更改用戶控件的輸出緩存。這些字符串表明在用戶控件中聲明的ASP.NET服務器控件的ID屬性值。除非已經包含了VaryByParam屬性,不然在@ OutputCache指令中,該屬性是必需的。
VaryByCustom
用於自定義輸出緩存要求的任意文本。若是賦予該屬性值是browser,緩存將隨瀏覽器名稱和主要版本信息的不一樣而異。若是輸入了自定義字符串,則必須在 應用程序的Global.asax文件中重寫HttpApplication.GetVaryByCustomString方法。
VaryByHeader
該屬性中包含由分號分隔的HTTP標頭列表,用於使輸出緩存發生變化。當將該屬性設爲多標頭時,對於每一個指定的標頭,輸出緩存都包含一個請求文檔的不一樣版 本。VaryByHeader屬性在全部HTTP 1.1緩存中啓用緩存項,而不只限於ASP.NET緩存。用戶控件中的@ OutputCache指令不支持此屬性。
VaryByParam
該屬性定義了一個分號分隔的字符串列表,用於使輸出緩存發生變化。默認狀況下,這些字符串與用GET方法屬性發送的查詢字符串值對應,或與用POST方法 發送的參數對應。當將該屬性設置爲多參數時,對於每一個指定的參數,輸出緩存都包含一個請求文檔的不一樣版本。可能的值包括「none」、「*」和任何有效的 查詢字符串或POST參數名稱。值得注意的是,在輸出緩存ASP.NET頁時,該屬性是必需的。它對於用戶控件也是必需的,除非已經在用戶控件的@ OutputCache指令中包含了VaryByControl屬性。若是沒有包含,則會發生分析器錯誤。若是不須要使緩存內容隨任何指定參數發生變化, 則可將該值設爲「none」。若是要使輸出緩存根據全部參數值發生變化,則將屬性設置爲「*」。 數據庫
詳見MSDN: http://msdn.microsoft.com/zh-cn/library/hdxfb6cy(v=vs.85).aspx瀏覽器