.net cache對象高速緩存機制


在.net中微軟給我們提供高速緩存機制,很好的緩解了服務器的壓力。.net中提供了aspx頁面緩存,cache對象緩存,sql數據庫緩存。

這里我只對cache對象緩存使用和背景說下自己的觀點。

經常使用動軟的代碼生成器,在抽象工廠模式下的采用對象緩存創建DAL層實例。一直沒有考慮這里的原理,今天翻閱《ASP.NET3.5高級編程》這本書中的高級緩存,突然明白了一個道理,這就是所謂的“學而不思則罔,思而不學則殆”。我們長期在工作的環境下,反而會不去學習思考一些事情,一些代碼只知道復制過來,實現了某個功能就行,這樣長期下去對自己的職業成長是有影響的。

大家熟知在BS的開發模式下,並行用戶是有很多的,而頁面的代碼,類中對象是共享訪問還是有各自獨立的實例。很顯然每個用戶的數據是分離的,是線程獨立的。譬如:每個用戶的sessionid不同,每個人的實例對象也是不同。例如,一個student類,我的student和其他用戶是不一樣的,我的studentid,姓名,年齡都是和其他人不同的。這個唯一性是比較好理解吧。

這樣的結果就是如果在短時間內,大量用戶並行訪問網站,就會造成每個會話都會分配一系列的內存空間,短時間內內存得不到釋放,系統的訪問速度就會降低,性能受到很大影響。

微軟給我提供cache緩存對象,緩存是存儲在web服務器中應用程序的應用程序域里,所有用戶共享使用。類似Application對象,所有會話共享使用。這里就有一個問題要思考,如果我緩存Student類,那怎么能區隔開不同用戶的不通過對象實例,顯然是不可行的。那什么樣的數據適合保存在cache中共享,什么樣的數據每個用戶是不同的,無法共享使用。

在動軟代碼生成器中,生成的項目采用三層架構。三層中在bll層創建dal層對象時,采用cache緩存創建對象實例。我翻看dal層類,發現dal層中所有類,沒有自己的成員變量,只有共有的成員方法。如果不采用緩存,不同用戶每次生成的dal的類對象,沒有任何區別,對象調用方法都是傳遞局部變量,方法調用完對對象沒有任何改變。每個人調用都是相同的。

看到這里我恍然大悟,這也就說明了為什么動軟把DAL層的類進行的緩存封裝,而其他層的類沒有緩存。

在使用緩存的時候大家要注意這一點,什么情況下使用緩存,什么數據使用緩存。

像Model實體類,是不能進行緩存共享的,不能保證每個實例都是相同的。在三層中的BLL層也是可以進行緩存處理的,根據實際情況可以自行封裝一下。

顯然應用級的共享使得所有用戶的實例只開辟一片內存空間,像文中提到的DAL層緩存共享,不是每個會話開辟一片內存,而是至始至終只有一片。這樣就大大降低了系統的開銷,提高了系統的性能。

cache類的使用應該說是比較簡單的,類似session的鍵值對。cache可以保持任何類型的數據。

舉例:Cache['Student']=new Student();

 

所以大家在工作開發的時候一定要多思考,不然你開發做了好幾年了,回頭想想覺得自己的進步太慢了,反觀朋友同學升職的升職,高薪的高薪。反倒自己總是在埋怨運氣怎么那么差!!這也就驗證了古人的話:“學而不思則罔”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM