我有一个基于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