本文初步探討了C#緩存的原理及應用,并以實例加以分析總結,這些對C#初學者來說是很有必要熟練掌握的內容。具體如下:
一、概述:
緩存應用目的:緩存主要是為了提高數據的讀取速度。因為服務器和應用客戶端之間存在著流量的瓶頸,所以讀取大容量數據時,使用緩存來直接為客戶端服務,可以減少客戶端與服務器端的數據交互,從而大大提高程序的性能。
1、緩存的引用空間:System.Web.Caching; 緩存命名空間主要提供三種操作:緩存數據對象、對象的緩存依賴和數據庫的緩存依賴。其中緩存任何對象都使用一個類Cache,但當緩存發生改變時,普通對象和數據庫對象的依賴處理不同。
2、管理緩存類:Cache
Cache類用來存儲數據對象,并提供方法對這些對象進行編輯。Cache類屬于字典類,其根據一定的規則存儲用戶需要的數據,這些數據的類型不受限制,可以是字符串、數組、數據表、Dataset和哈希表等。
使用Cache類的優點是當緩存的數據發生變化時,Cache類會讓數據失效,并實現緩存數據的重新添加,然后通知應用程序,報告緩存的及時更新。
二、方法詳解:
Cache類的方法主要提供對緩存數據的編輯操作,如增、刪、改等。
Add 將數據添加到Cache對象
Insert 向Cache中插入數據項,可用于修改已經存在的數據緩存項
Remove 移除Cache對象中的緩存數據項
Get 從Cache對象中獲取指定的數據項,注意返回的是Object類型,需要進行類型轉換
GetType 從Cache對象中獲取數據項的類型,判斷數據類型后,方便進行轉換
最需要注意的是Add方法,其使用語法如下:
public Object Add (string key,Object value,CacheDependency dependencies,DateTime absoluteExpiration,TimeSpan slidingExpiration,CacheItemPriority priority,CacheItemRemovedCallback onRemoveCallback)
在使用Add方法時,以上7個參數是必需的,其代表意義如下:
― 參數“key”代表緩存數據項的鍵值,必須是唯一的。
― 參數“value”代表緩存數據的內容,可以是任意類型。
― 參數“dependencies”表示緩存的依賴項,也就是此項的更改意味著緩存內容已經過期。如果沒有依賴項,可將此值設置為NULL。
― 參數“absoluteExpiration”是日期型數據,表示緩存過期的時間,.NET 2.0提供的緩存在過期后是可以使用的,能使用多長時間,就看這個參數的設置。
― 參數“slidingExpiration”的類型表示一段時間間隔,表示緩存參數將在多長時間以后被刪除,此參數與absoluteExpiration參數相關聯。
― 參數“priority”表示撤銷緩存的優先值,此參數的值取自枚舉變量“CacheItemPriority”,優先級低的數據項將先被刪除。此參數主要用在緩存退出對象時。
― 參數“onRemoveCallback”表示緩存刪除數據對象時調用的事件,一般用做通知程序。
應用代碼如下:
ArrayList myarray = new ArrayList(); myarray.Add("1.學習天地1"); myarray.Add("2.學習天地1"); myarray.Add("3.學習天地1"); myarray.Add("4.學習天地1"); string item = "這是一條緩存"; Cache["item"] = item;//賦值 Response.Write(Cache.Get("item") + "<br/>"); item = "更改一條緩存數據"; Cache.Insert("item", item);//更改緩存值 Response.Write(Cache.Get("item") + "<br/>"); //Cache.Remove("item"); //移除緩存值 //Response.Write(Cache.Get("item") + "<br/>"); Response.Write(Cache["item"].GetType().Name + "<br/>");//GetType獲得Cache的數據類型 Response.Write(Cache.Get("Array") + "<br/>");//GetType獲得Cache的數據類型 IDictionaryEnumerator bianli = Cache.GetEnumerator();//遍歷整個緩存 while (bianli.MoveNext()) { Response.Write(bianli.Value + "<br/>"); } Response.Write("獲取緩存數量:" + Cache.Count); if (Cache["Array"] == null) {//當緩存Array不存在時,添加緩存,緩存時間設定為5秒 Cache.Add("Array", myarray, null, DateTime.Now.AddSeconds(5), TimeSpan.Zero, CacheItemPriority.Normal, null); }
3、 緩存依賴類:CacheDependency類
功能說明:
CacheDependency類被稱為是緩存依賴類,其具體意義表現在當緩存對象的實際數據發生改變時,它能及時通知緩存對象。例如緩存對象“Category”保存的是一個XML文件的數據,如果XML文件發生了變化,那么系統通過CacheDependency類就會及時更新緩存對象“Category”的內容,這樣就能保證用戶讀取的永遠是最新的數據。
代碼實例:
CaCheXml.xml文件如下:
<?xml version="1.0" encoding="utf-8" ?><book> <bookinfo> <name>英國古代</name> <price>28.00</price> </bookinfo> <bookinfo> <name>中國歷史</name> <price>20.00</price> </bookinfo> <bookinfo> <name>中國歷史1232sdf2</name> <price>20.00</price> </bookinfo></book>
后臺代碼如下:
private static CacheDependency Mydata; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("Cachexml.xml"));//讀取Xml里面數據 if (Cache["CXml"] == null) { //創建緩存依賴項 Mydata = new CacheDependency(Server.MapPath("Cachexml.xml")); Cache.Add("CXml", ds, Mydata, DateTime.Now.AddSeconds(10), TimeSpan.Zero, CacheItemPriority.Normal, null); } } } protected void Button1_Click(object sender, EventArgs e) { if (Mydata.HasChanged) {//判斷緩存是否更改 Response.Write("緩存已經更改,更改時間為"+Mydata.UtcLastModified);//獲取緩存的跟新時間 } if (Cache["CXml"] == null) {//當xml文件被改動時緩存從新加載 DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("Cachexml.xml"));//讀取Xml里面數據 //創建緩存依賴項 Mydata = new CacheDependency(Server.MapPath("Cachexml.xml")); Cache.Add("CXml", ds, Mydata, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null); } this.GridView1.DataSource = Cache["CXml"]; this.GridView1.DataBind(); }
新聞熱點
疑難解答