我有KeyValuePairs,我想将新值添加到ConcurrentDictonary。如果未包含密钥,我想添加它。但更快/更好的是什么:
这个:
dict.AddOrUpdate(pair.Key, pair.Value, (ok, ov) => pair.Value);
或这个:
if (dict.ContainsKey(pair.Key))
{
dict[pair.Key] = pair.Value;
}
else
{
dict.TryAdd(pair.Key, pair.Value);
}
我担心AddOrUpdate做了我不想要/不需要的额外工作,并且需要更长时间,因为Lambda也必须执行。
这两种方法中哪一种更快?或者是否有更快的方法?
并发字典中的AddOrUpdate是原子操作,如果你将它分离为两个方法调用ContainsKey
和TryAdd
它不再是原子的,因此失败了并发字典的目的。在这种情况下,您不应该担心性能。
我担心AddOrUpdate做了我不想要/不需要的额外工作
这两个代码不相同。如果你想要线程安全使用AddOrUpdate
。如果线程安全没有问题,那么只需使用比Dictionary
更简单,更快速的ConcurrentDictionary
并且它需要更长的时间,因为Lambda也必须执行。
执行lambdas与执行其他方法一样快(如果你不属于微优化课程)