轉帖|其它|編輯:郝浩|2010-06-08 10:11:47.000|閱讀 530 次
概述:你在生成高性能網絡應用程序時所遇到的一個問題就是需要避免重復。一個Cache對象允許在它們第一次被請求時在內存中緩存項,然后將被緩存的副本用于以后的請求。除緩存個別項,如緩存中的計算結果以外,Asp.net提供一個輸出緩存可用于保存網頁和用戶控件。Cache對象和輸出緩存是擁有相同的角色和屬性,但它們是皆然不同的兩種對象。本文將探討Cache對象的使用問題。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
什么是Cache對象?
你在生成高性能網絡應用程序時所遇到的一個問題就是需要避免重復。一個Cache對象允許在它們第一次被請求時在內存中緩存項,然后將被緩存的副本用于以后的請求。使用被緩存的副本允許你避免重建滿足以前請求的信息,特別是那些每次創建時都需占有明示的服務器上的處理器時間的命令。
除緩存個別項,如緩存中的計算結果以外,Asp.net提供一個輸出緩存可用于保存網頁和用戶控件。Cache對象和輸出緩存是擁有相同的角色和屬性,但它們是皆然不同的兩種對象。
ASP.NET提供一個全特性的緩存引擎,用于保存和獲取信息片段。Cache對象沒有關于它所包含的的項的信息。Cache對象僅包含對于那些對象的引用以及提供它們的依賴項和設置過期策略。Cache還提供方法在相同網絡應用程序的網頁之間傳遞值。緩存方法實現自動的鎖,所以,值在被多個頁并發訪問時是安全的。
那么Cache對象是如何工作的哪?
使用Cache對象的的過程是:
1. 頁面請求的項被標識為已經在Cache對象中保存。
2. ASP.NET 檢查 Cache 對象并用已緩存的版本來決定是否可用。
3. 如果緩存的版本不可用,ASP.NET 重新創建項,使用此項,然后將它保存在Cache對象以備后用。
我們如何使用Cache對象的鍵值對?
Cache對象使用鍵值對保存和獲取對象。鍵是緩存鍵字符串,用于引用對象。值是被緩存的對象。在最簡單的例子中,將項放到緩存中再獲取它就像是將某項被放到字典中。
要想將項添加到Cache對象: Cache["mykey"] = myValue;
要想從Cache對象中獲取項: myValue = Cache["mykey"];
代碼示例如下:
DataTable dt = new DataTable();
…………………………………………
Cache["ObjDataTable"] = dt; 將一個DataTable緩存到Cache對象中。
DataTable dt = new DataTable();
dt = Cache["ObjDataTable"] as DataTable; 將被保存在緩存中DataTable從緩存中獲取。
ASP.NET Cache 對象設計用于保證它并不使用過多的服務器內存。結果是,當用內存變得缺乏時,Cache對象自動刪除最少被使用的項。你可以通過定義時間限制、依賴項、以及項在Cache對象中的優先級來影響 Cache對象保存和刪除項的方式。
Cache對象中的項只要是依賴或時間限制被觸發,就是立即被刪除。試圖獲取被刪除的項將返回null值,除非項再次被添加到 Cache對象中。
絕對期限
你可以使用 AbsoluteEXpiration 參數為項定義最大的絕對生存期。此參數是 DateTime 類型的參數,允許你指定項過期的時間。
我在下面的代碼指定了從創建起5分鐘后,myValue 從 Cache 對象中被刪除:
Cache.Insert("myKey", myValue, null, DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration);
滑動期限
你可以通過使用 SlidingExpiration 參數為項定義最大的相對生存期。這是一個 TimeSpan 類型參數,允許你指定每個對象自從最后一次訪問后的時間間隔以及何時對象到期。
我在下面的代碼指定了 myValue 最后的訪問的20分鐘后被從 Cache對象中刪除:
Cache.Insert("myKey", myValue, null, null, TimeSpan.FromSeconds(20));
依賴項
有時你想某對象從 Cache對象中被刪除,因為支持的項,如文件已經改變。ASP.NET 允許你基于依賴項或另一個緩存的項來定義緩存項的合法性。基于外部文件和目錄的依賴項被
稱為文件依賴項,依賴于另一個緩存項的依賴項被稱為鍵依賴項。如果依賴項改變,緩存的項被稱為不合法,然后從Cache對象中刪除。
我在下面的代碼指定了當 myDoc.xml 文件更改時,myValue 從 Cache對象中刪除:
Cache.Insert("myKey", myValue, new CacheDependency(Server.MapPath("myDoc.xml")));
緩存項優先級
當網絡服務器運行的內存可用量降低時,Cache對象有選擇地刪除項以釋放系統內存。你指定高一點優先級的項較低可能從緩存中被刪除,而被指定為低一些優先級的項被刪除的可能性就要大一些。
我在下列代碼指定了 myValue 有高優先級,將成為當服務器內存被限制時,最后從 Cache對象刪除的項之一:
Cache.Insert("myKey", myValue, null, null, Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove);
設置 Cache.Insert 中參數的示例
下列代碼將一個 MyBook 的值使用許多參數插入到了 Cache對象中。下列首先發生的依賴項或超 時事件將使項被從 Cache對象中刪除:
在保存5分鐘后被刪除。
在最后訪問30秒鐘后被刪除。
在 Books.xml 文件更改后刪除。
將項的優先級設置為高,從而如果服務器資源成為問題時最后被刪除。
當項被從 Cache對象刪除時,回調函數onRemove 運行。
Cache.Insert("MyBook.CurrentBook", CurrentBook, new CacheDependency(Server.MapPath("")), DateTime.Now.AddMinutes(5), TimeSpan.FromSeconds(30), CacheItemPriority.High, onRemove);
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");
通過指定依賴項向緩存添加項
調用 Insert 方法,將 CacheDependency 對象的一個實例傳遞給該方法
下面的代碼示例添加名為 CacheItem3 的項,該項依賴于緩存中名為 CacheItem2 的另一個項:
string[] dependencies = { "CacheItem2" };
Cache.Insert("CacheItem3", "Cached Item 3",
new System.Web.Caching.CacheDependency(null, dependencies));
下面的代碼示例演示將名為 CacheItem4 的項添加到緩存中,并且在名為 XMLFile.xml 的文件上設置文件依賴項:
Cache.Insert("CacheItem4", "Cached Item 4",
new System.Web.Caching.CacheDependency(
Server.MapPath("XMLFile.xml")));
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載