我有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;
}
}
答案 0 :(得分:4)
查看此页面上的ConcurrentDictionary
,了解thread-safe collections。
在内部,它可以锁定每个&#34;桶&#34;在哈希表中。这意味着如果您的应用程序有大量并行读取,您可能会获得巨大的性能提升。在选择使用哪一个之前,您应该衡量Dictionary
以确定效果是否可以接受,如果不是,请衡量ConcurrentDictionary
以确定您是否获得了效果。