如何正确处理添加新项目到字典?

我有一个ASP.NET应用程序,我使用静态类作为缓存。 在静态类中是内部字典,它包含缓存的对象。 当然,在静态类中有添加/删除/清除等方法…它看起来如下:

public static class CacheManager { private static Dictionary cacheItems = new Dictionary(); private static ReaderWriterLockSlim locker = new ReaderWriterLockSlim(); public static Dictionary 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(); } } 

或者将其保留在第一个代码段中?

先感谢您。

您可以再实施一个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 。 这是ConcurrentDictionary的代码。

只执行两次:

cacheItems.Add(key, data);

……你会知道答案。 基本上,exception将被try / finally块抛出并捕获。 我个人会使用if语句而不是将所有逻辑责任放在try块上,但它是一个偏好的问题……