我有一个ASP.NET应用程序,我使用静态类作为缓存。在静态类中是内部字典,它包含缓存的对象。当然,在静态类中有像Add / Remove / Clear这样的方法......它看起来如下:
public static class CacheManager
{
private static Dictionary<string, object> cacheItems = new Dictionary<string, object>();
private static ReaderWriterLockSlim locker = new ReaderWriterLockSlim();
public static Dictionary<string, object> CacheItems
{
get
{
return cacheItems;
}
}
public static void AddCacheItem(string key, object data)
{
locker.EnterWriteLock();
try
{
cacheItems.Add(key, data);
}
finally
{
locker.ExitWriteLock();
}
}
...
}
ASP.NET应用程序运行时,项目已添加到缓存(字典)中。我只是想问一下,如果已经以这种方式添加密钥,我应该在Add方法中检查一下:
public static void AddCacheItem(string key, object data)
{
locker.EnterWriteLock();
try
{
if (!cacheItems.ContainsKey(key))
{
cacheItems.Add(key, data);
}
}
finally
{
locker.ExitWriteLock();
}
}
或者将其保留在第一个代码段中?
提前谢谢。
答案 0 :(得分:3)
您可以再实施一种方法TryAdd
public static bool TryAddCacheItem(string key, object data)
{
locker.EnterWriteLock();
try
{
if (cacheItems.ContainsKey(key))
{
return false;
}
cacheItems.Add(key, data);
return true;
}
finally
{
locker.ExitWriteLock();
}
}
我也建议使用ConcurrentDictionary。 Here是ConcurrentDictionary的代码。
答案 1 :(得分:0)
只执行两次:
cacheItems.Add(key, data);
......你会知道答案。基本上,异常将被try / finally块抛出并捕获。我个人会使用if语句而不是将所有逻辑责任放在try块上,但这是一个偏好的问题......