0

我有 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 也必须执行。

这两种方法哪个更快?还是有更快的方法?

4

1 回答 1

2

并发字典中的 AddOrUpdate 是原子操作,如果将其分离为两个方法调用ContainsKey并且TryAdd它不再是原子的,那么就违背了并发字典的目的。在这种情况下,您不必担心性能。

我担心 AddOrUpdate 会做我不想要/不需要的额外工作

这两个代码是不等价的。如果你想要线程安全使用AddOrUpdate. 如果线程安全不是问题,那么只需使用DictionaryConcurrentDictionary

并且它需要更长的时间,因为 Lambda 也必须执行。

执行 lambdas 与执行其他方法一样快(如果你当然不陷入微优化)

于 2019-03-05T14:51:53.517 回答