什么需要更少的CPU时间/什么是更快/更小的负载? AddOrUpdate或if / else与TryAdd?

问题描述 投票:0回答:1

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

这两种方法中哪一种更快?或者是否有更快的方法?

c# load cpu-usage concurrentdictionary cpu-time
1个回答
1
投票

并发字典中的AddOrUpdate是原子操作,如果你将它分离为两个方法调用ContainsKeyTryAdd它不再是原子的,因此失败了并发字典的目的。在这种情况下,您不应该担心性能。

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

这两个代码不相同。如果你想要线程安全使用AddOrUpdate。如果线程安全没有问题,那么只需使用比Dictionary更简单,更快速的ConcurrentDictionary

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

执行lambdas与执行其他方法一样快(如果你不属于微优化课程)

© www.soinside.com 2019 - 2024. All rights reserved.