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 项几何信息,并且查找位于内部循环中。请不要给出“过早优化是万恶之源”的答案。:)
是的,我已经简介了。
ConcurrentDictionary 中有一个方法ConcurrentDictionary.AddOrUpdate可以完成您想要的操作。您可以根据字典中的先前值一次性更新字典中的现有值。
然而,并发字典应该在多线程情况下使用,所以我可以想象它会执行一些锁定,这可能会破坏您的优化目标。但话又说回来,您始终可以进行基准测试并看看效果如何。