gpt4 book ai didi

c# - 如何使用单键查找优化更新 C# 字典?

转载 作者:太空狗 更新时间:2023-10-30 01:19:53 25 4
gpt4 key购买 nike

比如说我有

Dictionary<string, double> foo;

我可以

foo["hello"] = foo["hello"] + 2.0

或者我可以做

foo["hello"] += 2.0

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

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

是的,我已经分析过了。

enter image description here

最佳答案

如评论所述,使用类可能会更快,因为:

对于结构,您必须按照评论中的说明进行双重查找。

对于类,您只需转到类引用的内存并可以在那里更新它。

每次查找:

  • 获取哈希码
  • 拿到水桶
  • 遍历以找到合适的
  • (这都涉及读取多个 ref 对象值)

但是,如果您使用一个类并更新它的值:

  • 更改相对于该 ref 的正确位置的值。

这是内存中的单个更改。

@George Duckett 的解决方案应该更快。更改为一个类并获取 ref 并更新对象的值:

var hello = foo["hello"]; 
hello.howAreYou += 2.0;

顺便说一下,这是一个可变类在性能上优于不可变结构的示例。

关于c# - 如何使用单键查找优化更新 C# 字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21424718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com