我正在尝试改进一些不久前编写的代码。该功能对系统的核心功能非常重要,因此我对大修持谨慎态度。
我正在使用字典来保存对象
Dictionary<Node, int> dConnections
对象
Node
它本身就是一个包含许多属性和一些列表的复杂对象。这本词典可以容纳大约 100 个或更多条目。
目前正在检查字典是否包含类似的节点
dConnections.ContainsKey(Node)
所以我假设(检查此节点是否在字典中)字典将必须检查整个节点及其属性是否与字典中的节点匹配(它将继续遍历字典直到找到匹配项)这会对性能产生重大影响吗?
我最好不要在字典中使用对象而是使用对象ID。
最佳答案
.NET 字典是 Inside 中的哈希表。这意味着如果 Node 不覆盖 GetHashCode 和 Equals 方法,当您调用 ContainsKey 时,它将匹配:
免责声明:这是一个摘要。事情有点复杂。请不要叫我名字,因为我过于简单化了。
这个算法非常有效。当您说字典中有 100 个或更多条目时,这不是“很多”。这是几个。
这也意味着 Node 对象的内容与 ContainsKey 的匹配方式无关。它将与完全相同的引用匹配,并且仅与该引用匹配。
如果您自己实现 GetHashCode 和 Equals,请注意,当实例属性更改(不可变)时,这些方法返回值不应更改。否则,您很可能会在错误的存储桶中获取 key ,因此完全无法访问(无需枚举整个字典)。
关于c# - 字典性能提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12893479/