我正在尝试改进一段时间写的代码.该功能对系统的核心功能非常重要,因此我对大刀阔斧的改革持谨慎态度.
我正在使用字典来保存对象
Dictionary<Node, int> dConnections
Run Code Online (Sandbox Code Playgroud)
该对象Node本身就是一个包含许多属性和一些列表的复杂对象.这个字典可以变得非常大,可容纳100个或更多条目.
目前正在检查字典是否包含类似的节点
dConnections.ContainsKey(Node)
Run Code Online (Sandbox Code Playgroud)
所以我假设(为了检查这个节点是否在字典中),字典必须检查整个节点及其属性是否与字典中的节点匹配(它将继续迭代字典直到找到匹配)这会对性能产生重大影响吗?
我最好不要在字典中使用对象而是使用对象id.
.NET字典是Inside中的哈希表.这意味着如果Node没有覆盖GetHashCode和Equals方法,当您调用ContainsKey时,它将匹配:
免责声明:这是一个总结.事情有点复杂.请不要叫我名字,因为我过于简单了.
该算法非常有效.如果你说字典中有100个或更多条目,那就不是"很多"了.这是一些.
这也意味着Node对象的内容与ContainsKey匹配的方式无关.它将与完全相同的引用匹配,并且仅针对此引用.
如果您自己实现GetHashCode和Equals,请注意当实例属性更改(不可变)时,这些方法返回值不应更改.否则你很可能会在错误的存储桶中获取密钥,因此完全无法访问(无需枚举整个字典).