ASP.NET 為您提供了一個強大的、便於使用的緩存機制,用於將需要大量服務器資源來創建的對象存儲在內存中。緩存這些類型的資源會大大改進應用程序的性能。
緩存是由 Cache 類實現的;緩存實例是每個應用程序專用的。緩存生存期依賴於應用程序的生存期;重新啟動應用程序後,將重新創建 Cache 對象。
設計 Cache 類是為了便於使用。您可以將項放置在 Cache 中,並在以後使用簡單的鍵/值對來檢索這些項。
Cache 類提供了強大的功能,允許您自定義如何緩存項以及將它們緩存多長時間。例如,當缺乏系統內存時,緩存會自動移除很少使用的或優先級較低的項以釋放內存。該技術也稱為清理,這是緩存確保過期數據不使用寶貴的服務器資源的方式之一。
當執行清理時,您可以指示 Cache 給予某些項比其他項更高的優先級。若要指示項的重要性,可以在使用 Add 或 Insert 方法添加項時指定一個 CacheItemPriority 枚舉值。
當使用 Add 或 Insert 方法將項添加到緩存時,您還可以建立項的過期策略。您可以通過使用 DateTime 值指定項的確切過期時間(絕對過期時間),來定義項的生存期。也可以使用 TimeSpan 值指定一個彈性過期時間,彈性過期時間允許您根據項的上次訪問時間來指定該項過期之前的運行時間。一旦項過期,便將它從緩存中移除。試圖檢索它的值的行為將返回 null(在 Visual Basic 中為 Nothing),除非該項被重新添加到緩存中。
對於存儲在緩存中的易失項(例如那些定期進行數據刷新的項或那些只在一段時間內有效的項),通常設置一種過期策略:只要這些項的數據保持為最新的,就將它們保留在緩存中。例如,如果您正在編寫一個應用程序,該應用程序通過另一個網站獲取數據來跟蹤體育比賽的比分,那麼只要源網站上比賽的比分不更改,就可以緩存這些比分。在此情況下,您可以根據其他網站更新比分的頻率來設置過期策略。您可以編寫代碼來確定緩存中是否是最新的比分。如果該比分不是最新的,則代碼可以從源網站讀取比分並緩存新值。
最後,ASP.NET 允許您根據外部文件、目錄(文件依賴項)或另一個緩存項(鍵依賴項)來定義緩存項的有效性。如果具有關聯依賴項的項發生更改,緩存項便會失效並從緩存中移除。您可以使用該技術在項的數據源更改時從緩存中移除這些項。例如,如果您編寫一個處理 XML 文件中的財務數據的應用程序,則可以從該文件將數據插入緩存中並在此 XML 文件上保留一個依賴項。當該文件更新時,從緩存中移除該項,您的應用程序重新讀取 XML 文件,然後將刷新後的數據放入緩存中。
將項添加到緩存中
可以使用 Cache 對象訪問應用程序緩存中的項。可以使用 Cache 對象的 Insert 方法向應用程序緩存添加項。該方法向緩存添加項,並且通過幾次重載,您可以用不同選項添加項,以設置依賴項、過期和移除通知。如果使用 Insert 方法向緩存添加項,並且已經存在與現有項同名的項,則緩存中的現有項將被替換。
還可以使用 Add 方法向緩存添加項。使用此方法,您可以設置與 Insert 方法相同的所有選項;然而,Add 方法將返回您添加到緩存中的對象。另外,如果使用 Add 方法,並且緩存中已經存在與現有項同名的項,則該方法不會替換該項,並且不會引發異常。
通過鍵和值直接設置項向緩存添加項
通過指定項的鍵和值,像將項添加到字典中一樣將其添加到緩存中。
下面的代碼示例將名為 CacheItem1 的項添加到 Cache 對象中:
Cache["CacheItem1"] = "Cached Item 1";
通過使用 Insert 方法將項添加到緩存中
調用 Insert 方法,傳遞要添加的項的鍵和值。
下面的代碼示例添加名為 CacheItem2 的字符串:
Cache.Insert("CacheItem2", "Cached Item 2");