程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 設計一個高效的緩存管理服務 C#

設計一個高效的緩存管理服務 C#

編輯:關於C#

一直以來,我都發現程序的運行速度不夠理想。通過查代碼,發現程序對數據庫的訪問非常頻繁,而且檢索出來的數據量比較大。為了讓程 序運行快起來,我想對程序采用適當的緩存方法。

我在C#嘗試了5種方法進行數據緩存,具體如下:

(如有遺漏,錯誤歡迎大家指正,歡迎提建議。)

1:Session方法:此方法是針對於每個用戶來的,如果用戶量比較大,那麼建議不要采用此方法,否則會大量耗盡服務器資源。

2:Cache方法:

2.1:對於每個用戶來說訪問的數據最好是一致的,否則要用不同的key標識不同的緩存。 (要緩存的數據至少也是按用戶類型來分的,如 果每個用戶可以按條件檢索得到不同的數據的話,即使不造成數據混亂, 估計也跟session沒什麼區別了,用戶很多的話太耗服務器資源)。

2.2:如果每個用戶得到的數據都不同,而且用戶數量較多,應該考慮往客戶端存了。

2.3:需要考慮當生成緩存後,如果數據庫中的數據發生變化了。而造成用戶得不到最新的數據的問題。(可參考:"數據庫緩存相關 性"的文章)

3:往客戶端寫文件

首先A頁面在運行的時候,從數據庫中取到了數據集,在顯示出數據報表的同時,A頁面將數據集轉化為xml文件,寫入客戶端。客戶如果要 打印該報表,那麼程 序就從客戶端取存入的xml文件,如果xml文件存在,就從中讀取數據並顯示成打印報表顯示出來。如果xml文件不存在, 就提示重新檢索數據。

例如:

<script type=text/javascript> //給客戶機上寫文件
function ws()
{
var fso,ctf;
fso = new ActiveXObject("Scripting.FileSystemObject"); //IE的安全設置裡面需要把沒有標記為安全的ActiveX控件和腳本 設置
為“啟用”,才不會提示。
ctf = fso.CreateTextFile("c:\\luiTestfile.txt",true);//true為可以覆蓋原有文件
ctf.Write("write content in file");
ctf.Close();
}
</script>

但是,每次操作客戶端的文件,系統都會提示是否運行沒有標識的ActiveX控件,用戶點否就不能成功保存文件了。

4:用cookie來存儲

--------------------寫cookie----------------------------------------
HttpCookie myCookie = new HttpCookie("DateCookie_lui");//DateCookie_lui為要創建的cookie鍵值對的鍵名。
DateTime now = DateTime.Now;
myCookie.Value = now.ToString();//給此cookie賦值
myCookie.Expires = now.AddMinutes(1);//設置cookie的過期日期和時間(此為1分鐘後過期),在客戶再次訪問服務 器同時附帶cookie文 件,如其中以這個名字的cookie過期,就會自動清除它。
this.Response.SetCookie(myCookie);//將此cookie寫入客戶端
--------------------讀cookie----------------------------------------
HttpCookie myCookie = new HttpCookie("myTestCookie_lui");//創建一個cookie操作對象
myCookie = Request.Cookies["DateCookie_lui"];//得到客戶端傳來的cookie數據,DateCookie_lui為要取的cookie鍵值對的鍵 名
if(myCookie != null)
Response.Write(" Cookie Name is:"+myCookie.Name+". Cookie Value is:"+myCookie.Value);
else
Response.Write(" Not found!");
用cookie的方法存儲數據,經過我反復嘗試發現cookie存儲值的大小被限定,(每項僅可存漢字僅1686個,字母或數字僅5059個),且 cookie文件的大小一旦超過大小(20kb左右)就會導致找不到頁面的錯誤,且每個cookie文件中只能存20項鍵值對。
5:嘗試在A頁面把dataset轉化為xml字符串,隱藏於頁面中,post提交到B頁面;在B頁面取到該xml字符串,然後將xml字符串轉化為dataset ,生成報表。
將dataset轉化為xml的字符串:
vDataXmlStr=ds.GetXml();//得到數據集的xml字符串
this.hidXmlStr.Value=vDataXmlStr;//存入頁面的隱藏元素中
------------------------------------------------------------------------
將xml字符串轉化為dataset:
vXmlStr = Request.Form["hidXmlStr"].ToString();//取xml字符串的變量值
System.IO.StringReader vSR = new System.IO.StringReader(vXmlStr);//讀取字符串
ds.ReadXml(vSR);//將xml讀入dataset中
------------------------------------------------------------
頁面中如果字體變成亂碼:要設置該頁面的<%@ Page responseEncoding="gb2312"%>

參考資料:設計一個高效的緩存管理服務

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved