C#緩衝介紹 Caching通用協助類代碼整理 .net幾種緩衝概述__.net

來源:互聯網
上載者:User

Cache的概述及用法和協助類:

  Cache 即快取.那麼cache是怎麼樣提高系統效能與運行速度呢。是不是在任何情況下用cache都能提高效能。是不是cache用的越多就越好呢。
  Cache 是怎麼樣工作的?
  Cache 是分配在伺服器上的一個公用的記憶體片。
  所謂公用指的cache只要一建立是任何一個用戶端瀏覽器都可以通過後台代碼訪問到它,它面向的是所有使用者,相對而言session也是伺服器上的一 段記憶體,但他面向的是單個使用者。它是伺服器的一段記憶體塊,也就是說每個cache一經建立就佔用了伺服器資源的。所以從這點來說我們就可以說:並不是 cache越多越好。  
  cache 是有時間限制的,超過了伺服器設定的到期時間,它就會被伺服器回收。
  cache 可以存放任何對象

     Cache支援裝箱/拆箱操作。如你可以把一個DataSet對象ds通過Cache.Insert(“dsCache”,ds)的方式存到Cache中,可以通過拆箱操作 DataSet ds = (DataSet)Cache[“dsCache”]來訪問它。

     Cache 一般用於資料較固定,用的較頻繁的地方。

    Cache是有時間限制的。超過了伺服器設定的到期時間,就會被伺服器回收。當cache被回收後對應的記憶體塊就會被清空,再次通過cache[“cachekey”]訪問對象時返回的就是null值。


web網站中緩衝的重要性毋庸置疑。我想很多.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,沒什麼值得討論的。

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,並且提供了基於檔案和目錄的緩衝依賴策略。關於緩衝到期策略也比較有探討的必要,不過個人開發中比較偏重於資料緩衝和替換,目前還沒有接觸和使用過比較完美的到期策略解決方案。


以下是協助類:

using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Caching;using System.Web.Hosting;namespace ECS.Utility{/// <summary>/// Caching 的摘要說明/// </summary>public class CacheHelper {/// <summary>/// 擷取當前應用程式指定CacheKey的Cache值/// </summary>/// <param name="CacheKey">/// <returns></returns>ypublic static object GetCache(string CacheKey){System.Web.Caching.Cache objCache = HttpRuntime.Cache;return objCache[CacheKey];}/// <summary>/// 設定當前應用程式指定CacheKey的Cache值/// </summary>/// <param name="CacheKey">/// <param name="objObject">public static void SetCache(string CacheKey, object objObject){System.Web.Caching.Cache objCache = HttpRuntime.Cache;objCache.Insert(CacheKey, objObject);}/// <summary>/// 設定當前應用程式指定CacheKey的Cache值/// </summary>/// <param name="CacheKey">/// <param name="objObject">public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration){System.Web.Caching.Cache objCache = HttpRuntime.Cache;objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);}      /// <summary>        /// 設定資料緩衝        /// </summary>       public static void SetCache(string CacheKey, object objObject, int timeout = 7200)        {            try           {                if (objObject == null) return;                var objCache = HttpRuntime.Cache;               //相對到期               //objCache.Insert(cacheKey, objObject, null, DateTime.MaxValue, timeout, CacheItemPriority.NotRemovable, null);                //絕對到期時間               objCache.Insert(cacheKey, objObject, null, DateTime.Now.AddSeconds(timeout), TimeSpan.Zero, CacheItemPriority.High, null);            }            catch (Exception)            {              //throw;            }        } /// <summary>/// 清除單一金鑰快取/// </summary>/// <param name="key">public static void RemoveKeyCache(string CacheKey){try{System.Web.Caching.Cache objCache = HttpRuntime.Cache;objCache.Remove(CacheKey);}catch { }}/// <summary>/// 清除所有緩衝/// </summary>public static void RemoveAllCache(){System.Web.Caching.Cache _cache = HttpRuntime.Cache;IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();if (_cache.Count > 0){ArrayList al = new ArrayList();while (CacheEnum.MoveNext()){al.Add(CacheEnum.Key);}foreach (string key in al){_cache.Remove(key);}}}/// <summary>      /// 清除所有緩衝    /// </summary>      public static void RemoveAllCache()      {          var cache = HttpRuntime.Cache;          var cacheEnum = cache.GetEnumerator();          while (cacheEnum.MoveNext())          {              cache.Remove(cacheEnum.Key.ToString());          }      } /// <summary>/// 以列表形式返回已存在的所有緩衝 /// </summary>/// <returns></returns> public static ArrayList ShowAllCache(){ArrayList al = new ArrayList();System.Web.Caching.Cache _cache = HttpRuntime.Cache;if (_cache.Count > 0){IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();while (CacheEnum.MoveNext()){al.Add(CacheEnum.Key);}}return al;}}}


  

C#緩衝主要是為了提高資料的讀取速度。因為伺服器和應用用戶端之間存在著流量的瓶頸,所以讀取大容量資料時,使用緩衝來直接為用戶端服務,可以減少用戶端與伺服器端的資料互動,從而大大提高程式的效能。

cache與session,cookie的區別:

session把資料儲存在伺服器端,每一個使用者都有屬於自己的Session,與別人的不衝突就是說,你登陸系統後,你的資訊(如帳號、密碼等)就會被儲存在伺服器上一個單獨的session中,當你退出系統後伺服器就會丟掉這個session,你的資料也就沒了,必須再次登陸,如果登陸逾時也會被丟掉,要看人家系統是怎麼設定的了Cookie同session一樣是儲存你個人資訊的,不過是儲存在用戶端,也就是你使用的電腦上,並且不會被丟掉,除非你刪除瀏覽器CookieCache是儲存系統上的資訊的,因為從Cache中讀資料比較快,有些系統(網站)會把一些經常被使用的資料放到Cache裡,提高訪問速度,最佳化系統效能 
session和cookie是面向單個使用者的,cache是面向的是所有使用者。
End。。。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.