#Any
| 預設值。的輸出可以快取在客戶端瀏覽器,快取在任何「下游」的客戶端(如代理伺服器),或快取在Web伺服器本身
|
Client
| 指明輸出快取只能儲存在發出要求的用戶端(即瀏覽器)的本機快取中
|
Downstream
| #指明輸出快取能儲存在任何支援HTTP1.1快取的裝置(如代理伺服器)中
|
Server
| #指明輸出快取將儲存在Web伺服器上
|
None
| #指明該頁面停用輸出快取
|
##
Duration允許我們控制頁面在快取中生存的時間(單位是秒)
VaryByParam允許我們快取頁面的不同版本。在上面的範例中,VaryByParam設定為了RequestID,所以ASP.NET使用RequestID參數的不同值,這些值或是在HTTP GET的查詢字串中傳入,或者是在HTTP POST的參數中傳入。可以透過檢查RequestID參數的值讓應用程式區分不同的使用者;透過在頁面的OutputCache指令中放置VaryByParam="RequestID",可以讓ASP.NET為每個使用者快取頁面的不同版本。
如果不想根據參數的值快取頁面的不問版本,那麼只要把VaryByParam設為none。
也可以要求ASP.NET為每個可能的參考陣列合快取頁面的一個版本。為此,可把VaryByParam設為*。
VaryByHeader和VaryByCustom功能與VaryByParam的相似之處在於,它們允許指定何時應建立頁面新的快取版本。
VaryByHeader允許我們根據由分號分隔的HTTP頭的清單末端快取頁面的不向版本。
VaryByCustom當設為browser時,允許我們根據瀏覽器的名稱和主版本資訊快取不同版本。也可以把它設為一個自訂方法的名稱,從而實現我們自己的邏輯,控制快取的版本。
片段快取
可以利用使用者控制項將頁面分段,在ascx檔案中寫入快取的語句,而不是在aspx檔案中寫快取語句,這樣ASP.NET就可以只緩存ascx片段的輸出了。一般像頁首或頁尾基本上都是一樣的,就不需要重新載入。但是如果其中有動態變化的資料就不能對其進行緩存,因為一旦被緩存後程式就不會再創建它的實例來更新資料顯示,只有等到生存期過期才行,所以對於這種情況就不適於用頁面片段快取。
注意:
一、注意片段快取不支援Location特性;快取頁面片段惟一合法的地方是web伺服器。這是因為片段快取在ASP.NET中是新的功能,所以瀏覽器和代理伺服器不支援。
二、片段快取有另外一個在頁面快取中沒有的功能-VaryByControl。 VaryByControl特性允許指定一個由分號分隔的字串列表,代表使用者控制項內使用的控制項的名稱;ASP.NET將針對值的每個不同的組合產生使用者構件的一個快取版本。
資料快取
低階API是Cache類,它位於ASP.NET中的System.web.Caching命名空間,可以用它快取產生很耗費資源的資料。 Cache類別的使用和Session與Application物件一樣簡單。每個應用程式只有一個Cache物件——這意味著使用Cache物件儲存在快取中的資料是應用程式層級的資料。讓事情更簡單的是,Page類別的Cache屬性使應用程式的Cache物件實例能在程式碼中使用。
透過Cache物件快取的資料儲存在應用程式的記憶體中。這表示該資料的生存期不會超過應用程式的重啟(事實上,這和儲存在Application與Session物件中的資料一樣,除非使用StateService或SQL State會話模式儲存Session資料)。
具體的使用和語法與Session和Application一樣。轉換回來的時候需要注意對其進行對應類型的強制類型轉換。
這不是在ASP.NET快取中新增快取項目的惟一方式。 Cache物件有兩個方法Insert()方法和Add()方法,它們靈活性更高。它們的用法近似,但稍有不同:
Insert()方法用於覆寫ASP.NET快取中現有的快取項目。
Add()方法只用於在ASP.NET快取中新增新的快取項目(如果用它覆寫現有的快取項,則會失敗)。
每個方法都有7個參數,而且兩個方法的參數相同。
在快取某一項時,可以指定它的相關性,告訴ASP.NET該快取項目在快取中一直保留到某個事件發生時為止。
相關性值
|
意思
|
CacheDependency
|
|
|
|
#允許指定一個檔案或快取鍵。如果檔案發生變化,物件就被刪除。如果快取鍵發生變化,物件也被刪除。 |
|
DateTime
這是DataTime值,指明快取資料過期的時間(絕對過期時間)
TimeSpan
| 這是一個時間間隔,指明快取資料在上一次存取後可以在快取中保留多長時間(彈性過期時間)
|
使用CacheItemPriority來指定快取資料的 優先權 | ,以便在快取被填滿的時候刪除那些優先權低的資料。
|
優先權值
|
意思
|
##High
| 設定為此優先權的快取項目是最不可能在記憶體不足時被刪除的
|
#AboveNormal
| 為此優先權的快取項目比優先權為Normal或以下的快取項目更優先保留
|
Normal
| 設為為此優先等級的快取項目比優先權為BelowNormal和Low的快取項目更優先保留
|
#BelowNormal
| 這是倒數第二個的優先層級;設為此優先權的快取項目只比優先權設為Low的快取項目更優先保留
|
Low
| 設為此優先權的快取項目是最有可能在記憶體不足時被刪除的
|
#Default
快取項目的優先權的預設值是Normal
NotRemovable
當快取項目設定為此優先權時,是在告訴ASP.NET即使是記憶體不足,也不要從快取中刪除它
DateTime dt = new DateTime(DateTime.Now.Year,12,31);
Cache.Add("MembersDataSet" ,dsMembers,null,
dt,TimeSpan.Zero,
CacheItemPriority.Normal,null);
第一個參數是引用快取物件的鍵,第二個參數是要快取的物件。第三個參數是null(表示沒有相關性)。
第四和第五個參數是絕對的過期時間和彈性的過期時間。這裡,我們指定快取應在當前年份的最後一天過期(dt)。我們要指定沒有彈性的過期時間,所以第五個參數使用TimeSpan.Zero。第六個參數使用System.Web.Caching.CacheItemPriority枚舉中的一個值,把優先權設為Normal。
指定一個5分鐘的彈性過期時間,沒有指定絕對過期時間
Cache.Add("MembersDataSet",dsMembers,null,
DateTime.MaxValue,TimeSpan.FromMinutes(5),
CacheItemPriority.Normal,null);
新增一個相關性。在這個範例中,過期時間也取決於一個檔案的修改,即test.xml檔:
CacheDependency dep = new CacheDependency(@"C:/test.xml");
Cache.Add("MembersDataSet ",dsMembers,dep,
DateTime.MaxValue,TimeSpan.FromMinutes(5),
CacheItemPriority.Normal,null);
過期時間取決於快取中另一項的修改:
String[] dependencyKeys = new String[1];
dependencyKeys[0] = "MembersChanged";
CacheDependency dependency = new CacheDependency(null, dependencyKeys);
Cache.Add("MembersDataSet" ,dependency,DateTime.MaxValue,TimeSpan.Zero,
CacheItemPriority.Normal,null);##########