如果對微電腦硬體系統有足夠的瞭解,那麼我們對於Cache這個名詞一定是耳熟能詳的。在CPU以及主板的晶片中,都引入了這種名為高速緩衝儲存空間(Cache)的技術。因為Cache的存取速度比記憶體快,因而引入Cache能夠有效解決CPU與記憶體之間的速度不匹配問題。硬體系統可以利用Cache儲存CPU訪問機率高的那些資料,當CPU需要訪問這些資料時,可以直接從Cache中讀取,而不必訪問存取速度相對較慢的記憶體,從而提高了CPU的工作效率。軟體設計借鑒了硬體設計中引入緩衝的機制以改善整個系統的效能,尤其是對於一個資料庫驅動的Web應用程式而言,緩衝的利用是不可或缺的,畢竟,資料庫查詢可能是整個Web網站中調用最頻繁但同時又是執行最緩慢的操作之一,我們不能被它老邁的雙腿拖緩我們前進的征程。緩衝機制正是解決這一缺陷的加速器。
4.1 ASP.NET緩衝概述
作為.Net架構下開發Web應用程式的主打產品,ASP.NET充分考慮了緩衝機制。通過某種方法,將系統需要的資料對象、Web頁面儲存在記憶體中,使得Web網站在需要擷取這些資料時,不需要經過繁瑣的資料庫連接、查詢和複雜的邏輯運算,就可以“觸手可及”,如“探囊取物”般容易而快速,從而提高整個Web系統的效能。
ASP.NET提供了兩種基本的緩衝機制來提供緩衝功能。一種是應用程式緩衝,它允許開發人員將程式產生的資料或報表業務對象放入緩衝中。另外一種緩衝機制是頁輸出緩衝,利用它,可以直接擷取存放在緩衝中的頁面,而不需要經過繁雜的對該頁面的再次處理。
應用程式緩衝其實現原理說來平淡無奇,僅僅是通過ASP.NET管理記憶體中的緩衝空間。放入緩衝中的應用程式資料對象,以鍵/值對的方式儲存,這便於使用者在訪問緩衝中的資料項目時,可以根據key值判斷該項是否存在緩衝中。
放入在緩衝中的資料對象其生命週期是受到限制的,即使在整個應用程式的生命週期裡,也不能保證該資料對象一直有效。ASP.NET可以對應用程式緩衝進行管理,例如當資料項目無效、到期或記憶體不足時移除它們。此外,調用者還可以通過CacheItemRemovedCallback委託,定義回調方法使得資料項目被移除時能夠通知使用者。
在.Net Framework中,應用程式緩衝通過System.Web.Caching.Cache類實現。它是一個密封類,不能被繼承。對於每一個應用程式定義域,都要建立一個Cache類的執行個體,其生命週期與應用程式定義域的生命週期保持一致。我們可以利用Add或Insert方法,將資料項目添加到應用程式緩衝中,如下所示:
Cache["First"] = "First Item";
Cache.Insert("Second", "Second Item");
我們還可以為應用程式緩衝添加依賴項,使得依賴項發生更改時,該資料項目能夠從緩衝中移除:
string[] dependencies = {"Second"};
Cache.Insert("Third", "Third Item",
new System.Web.Caching.CacheDependency(null, dependencies));
與之對應的是緩衝中資料項目的移除。前面提到ASP.NET可以自動管理緩衝中項的移除,但我們也可以通過代碼編寫的方式顯式的移除相關的資料項目:
Cache.Remove("First");