標籤:
web網站中緩衝的重要性毋庸置疑。我想很多asp.net開發人員在開發web應用系統的時候優先考慮使用的緩衝並不是第三方緩衝解決方案(比如 分布式緩衝memcached、redis等等),而應該是.net framework已經提供的多種緩衝解決方案。下面結合自己的開發經驗談談對.net framework中緩衝的認識。
1、System.Web.Caching.Cache
估計大部分做過asp.net開發的人都用過這個命名空間下的緩衝,我們可以直接使用HttpContext.Current.Cache執行個體而不 用執行個體化。當然這個命名空間下的Cache類是允許您執行個體化的,需要定製自己的緩衝系統的當然可以完全自己控制如何初始化這個類。我在園子裡看到過有很多 文章介紹Cache的CRUD輔助類庫大多數都是針對System.Web.Caching.Cache。
需要說明的是,我們還可以通過該命名空間下的HttpRuntime.Cache實現web、控制台、winform等不同表現形式下的緩衝,而且 完全無需自己執行個體化。HttpRuntime.Cache是之前個人開發中使用比較多的一個類,現在比較偏愛.net framework4.0中的增強型的緩衝類MemoryCache。
2、Output Cache
眾所周知,輸出緩衝主要分網頁輸出快取和頁面部分緩衝。說白了,就是緩衝整個頁面的html或者部分html,本來沒什麼值得討論的,但是最近看到dudu的這篇部落格才恍然發現,想不到使用它還真是大有講究,我以前怎麼就沒有發現這個問題呢?看來發現問題和解決問題的能力同樣重要,有時候前者甚至更重要啊。
3、System.Runtime.Caching
現在個人開發中使用最多的類MemoryCache出自這個命名空間,使用前需要引用using System.Runtime.Caching。MemoryCache繼承自ObjectCache, IEnumerable, IDisposable,其中ObjectCache是個抽象類別。用過MemoryCache的人都知道,這個MemoryCache有一個屬性叫 Default,通常可以像下面這樣使用:
private static ObjectCache memCache = MemoryCache.Default;
當然我們也完全可以通過public MemoryCache(string name, NameValueCollection config = null)建構函式初始化緩衝對象。
接著我們可以在web.config檔案中配置每個MemoryCache執行個體啟動並執行記憶體使用量配額方案和配額檢查周期,下面樣本參考MSDN:
<system.runtime.caching>
<memoryCache>
<namedCaches>
<add name=”Default” cacheMemoryLimitMegabytes=”10″ pollingInterval=”00:02:00″/>
</namedCaches>
</memoryCache>
</system.runtime.caching>
這些配置意義在於可以明確指定每個MemoryCache執行個體啟動並執行記憶體使用量配額方案和配額檢查周期。比如我們可以通過配置來按需更改 MemoryCache.Default執行個體的記憶體配額(不知道緩衝可用最大記憶體是多少,可能還是傳說中的800M左右)。緩衝到期策略與其它的緩衝架構 大同小異,與System.Web.Caching.Cache的不同只是名稱不叫CacheDependency,而叫ChangeMonitor,並且提供了基於檔案和目錄的緩衝依賴策略。關於緩衝到期策略也比較有探討的必要,不過個人開發中比較偏重於資料緩衝和替換,目前還沒有接觸和使用過比較完美的到期策略解決方案。
C#資料緩衝介紹及Caching通用協助類整理