字典上并发访问的性能

时间:2015-02-17 22:36:52

标签: c# dictionary

我有Dictionary<string,string>,其行为如下:

  • 一旦设置了键/值对,该值将永远不会改变
  • 写入与读取相比较小
  • 读取和写入可以由不同的线程执行

我目前正在做以下事情。但我想知道是否有办法避免围绕TryGet锁定?我的意思是我想要读书的最佳表现。

    private readonly Dictionary<string, string> _mappings = new Dictionary<string, string>();

    public string GetValueByKey(string key)
    {
        bool valueFound;
        string value;
        lock (_mappings)
        {
            valueFound = _mappings.TryGetValue(key, out value);
        }

        if (valueFound)
        {
            return value;
        }

        var resolvedValue = ResolveValueForKey(key);
        lock (_mappings)
        {
            _mappings[key] = resolvedValue;//I don't care computing the value and set it several times
            return resolvedValue;
        }
    }

1 个答案:

答案 0 :(得分:4)

查看此页面上的ConcurrentDictionary,了解thread-safe collections

在内部,它可以锁定每个&#34;桶&#34;在哈希表中。这意味着如果您的应用程序有大量并行读取,您可能会获得巨大的性能提升。在选择使用哪一个之前,您应该衡量Dictionary以确定效果是否可以接受,如果不是,请衡量ConcurrentDictionary以确定您是否获得了效果。