У меня есть система заказов на основе товаров через Интернет.
- Товары очень ограничены во времени, продаются за Y часов
- Каждый товар может содержать только X заказов
Для хранения заказов на единицу товара <= X Я использую этот механизм блокировки. </p>
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) от растущих пропорций?В настоящее время мы выполняем еженедельную перезагрузку сервера по другим причинам, но я не хочу, чтобы код полагался на такое поведение.
Существует ли другая структура данных, которая более подходит для этого механизма блокировки?Или есть умный способ найти и очистить старые записи в словаре?Идеи очень приветствуются!