實戰 .Net 資料訪問層 - 17

來源:互聯網
上載者:User
訪問|資料 GetCache的代碼很簡單:有則取之,無則填之,“是否到期”是其有效性的唯一判斷條件!接下來,作者就這個“是否到期”問題來進行一些探索,看看到底是怎麼回事。



Ok,還是先請大家看段代碼:



代碼15:到期無效之Cache篇!

public class CacheManager

{

private bool IsCacheExpired(string key)

{

bool bExpired = false;



if (HttpContext.Current != null)

{

// Web cache自動支援thread-safe,無須鎖定資源

if (HttpContext.Current.Cache[key] == null)

bExpired = true;

}

else

{

// Windows cache是自己實現的,不確保thread-safe,必須鎖定資源

lock (_htWinAppCache)

{

if (_htWinAppCache[key] == null)

bExpired = true;

else

{

WinAppCache cache = (WinAppCache)

_htWinAppCache[key];



if (cache.IsExpired())

{

cache = null;

_htWinAppCache[key] = null;

bExpired = true;

}

}

}

}



return bExpired;

}

}

























































































各位,從上面的代碼中,是否看出了一些端倪?



由於Web Appliction Cache(通過HttpContext.Current != null判斷是否Web ApplicationJ)得到了.NET Framework的直接支援,所以判斷“是否到期”非常方便,也不存在任何thread-safe問題J。但這個問題對於Windows Application來說就不太美妙了,既要自己實現IsExpired,又要擔心多線程並發訪問時的種種問題,真是吃力不討好的苦差啊L!上面代碼中的“_htWinAppCache”(自訂Cache)以及“lock (_htWinAppCache)”(確保thread-safe)就是為了應付Windows Application而採取的兩種非常手段!



可能有朋友會問了,Windows Application也要考慮Cache Management問題嗎?我的回答是:看情況而定!

對於普通的Client Windows Application,確實很少(請注意:不是沒有)涉及這個話題,但對於Server Application,例如:Remoting Server,Windows Service(WebServices不在此列),都促使我們不得不面對“嚴峻的現實”L(.NET Framework怎麼就沒有提供System.Windows.Caching命名空間呢?害得我們不得不另起爐灶L)!



上面的代碼就是考慮到Web Application與Windows Application並存的情況下,我們該如何?Cache Management支援!



目前的版本中,作者實現Windows Application下的“是否到期”非常簡單:就是看它被訪問過幾次!而這個次數,當然必須在配置資訊中進行設定了(請參考本段最後的一個配置範例)!

Web Application中的Cache Management自動化程度雖然很高,但也“逃不過”配置一關,而讀取完配置資訊後的處理工作就當仁不讓地落到了Parameter Classes的肩上(請參考上面的Cache Management之“結構示意圖”)!



下一段:http://www.csdn.net/develop/Read_Article.asp?id=27561


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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