如何通过单键查找优化 C# 字典的更新?

bra*_*ing 6 c# optimization performance dictionary

比如说我有:

Dictionary<string, double> foo;
Run Code Online (Sandbox Code Playgroud)

我可以:

foo["hello"] = foo["hello"] + 2.0
Run Code Online (Sandbox Code Playgroud)

或者我可以这样做:

foo["hello"] += 2.0
Run Code Online (Sandbox Code Playgroud)

...但是编译器只是将其扩展为上面的代码。我通过使用 JetBrains .Peek 查看程序集来验证这一点。

这似乎很浪费,因为需要进行两次关键查找才能更新。是否有一种字典实现可以在一次查找中完成此操作?请注意,我使用字典来存储来自网格的 100k 项几何信息,并且查找位于内部循环中。请不要给出“过早优化是万恶之源”的答案。:)

是的,我已经简介了。

截屏

Nik*_*iou 2

ConcurrentDictionary 中有一个方法ConcurrentDictionary.AddOrUpdate可以完成您想要的操作。您可以根据字典中的先前值一次性更新字典中的现有值。

然而,并发字典应该在多线程情况下使用,所以我可以想象它会执行一些锁定,这可能会破坏您的优化目标。但话又说回来,您始终可以进行基准测试并看看效果如何。