在C#中,我有以下的非常詳細的語法從數據庫中提取項目的簡單列表:如何使雙重檢查的鎖定語法不再冗長?
if (malls == null)
{
lock (_lock)
{
if (malls == null)
{
using (var session = NhibernateHelper.OpenSession())
{
malls = session.CreateCriteria<Mall>()
.AddOrder(Order.Asc("Name")).List<Mall>();
CacheManager.Set(CACHE_KEY, malls, TimeSpan.FromMinutes(CACHE_DURATION));
}
}
}
}
我所知道的雙重檢查鎖定的好處,我強烈支持它的使用,但它似乎非常冗長。你能推薦任何語法快捷方式或樣式可能會清理它一點?
我有興趣在這種模式的可能帶來的利益。根據我的經驗,人們嚴重誤解了這種模式,並且它的含義(例如,由於內存模型的差異,它在Mono上不能可靠地工作)。我從來沒有見過它所能帶來的所有好處。 – JaredPar 2009-07-30 14:58:06
有問題的方法將從數據庫中取出大約5000條記錄到內存中緩存。它將用於流量很大的ASP.NET站點,每秒鐘可能會被調用數百次到幾千次,所以我肯定希望緩存數據,同時避免另一個線程重新提取數據,因爲獲取鎖之前的空檢查失敗。另外,由於對函數的訪問量很大,我不能僅僅刪除第一個空檢查,因爲隨之而來的不必要的鎖定會掩蓋應用程序。 – Chris 2009-07-30 15:05:53