我有一個基於Web的訂單系統的項目。鎖字典不斷增長,如何清理的indeas?
- 項目是非常有限的時間,銷售用於Y小時
- 每個項目只允許X訂單
爲了保持訂單每件< = X我使用這個鎖定機制。
private static Dictionary<Guid, Object> PurchaseLockDictionary = null;
private static object GetLock(Guid itemId)
{
if (!PurchaseLockDictionary.ContainsKey(itemId))
{
PurchaseLockDictionary.Add(itemId, new object());
}
return PurchaseLockDictionary[itemId];
}
併購置看起來是這樣的:
public static Order Purchase(Buyer buyer, OrderItem item)
{
Order order;
try
{
lock (GetLock(item.Id))
{
// order stuff like counting current amount of orders, buyer validity etc
}
} catch (Exception e) {
// Exception stuff
}
return order;
}
現在,我的問題是,如何將我的閉鎖機構(Dictionary對象)從生長出來的比例?目前,我們每週都會重新啓動一次服務器,原因是其他原因,但我不希望代碼依賴這種行爲。
有沒有更適合這種鎖定機制的數據結構?或者,有沒有一種巧妙的方式來查找和清理詞典中的舊條目?想法是非常受歡迎的!
如果這段代碼是從多個線程中調用的(如果不是,那麼根本就不需要任何鎖),那麼你需要圍繞字典本身進行某種大的全局鎖定。如果不是這樣,那麼當多個線程碰到'ContainsKey','Add',索引器等時,運行競爭條件的風險,甚至破壞你的字典。 – LukeH 2011-04-28 14:53:04
這聽起來像你想要使用緩存解決方案,將過期的項目是不經常使用/訪問。如果是這樣,那麼你應該看看System.Runtime.Caching http://msdn.microsoft.com/en-us/library/system.runtime.caching.aspx – 2011-04-28 14:53:06
您是否重用了您在字典中添加的對象進行計數訂購物品的數量還是你使用它只是作爲鎖? – fixagon 2011-04-28 14:54:16