我将在.NET项目中使用Dictionary来存储大量对象。因此,我决定使用GUID字符串作为键,以确保每个对象的唯一键。
GUID(或更大的密钥)等大密钥会降低字典的性能,例如通过密钥检索对象?
谢谢, 安德烈
答案 0 :(得分:14)
我建议使用实际的Guid
而不是Guid
的字符串表示。是的,在比较字符串时,长度确实会影响所需的操作数,因为它必须逐个字符地比较字符串(最低限度;这是禁止任何特殊选项,如IgnoreCase
)。实际Guid
只会给你16个字节进行比较,而不是string
中的最小值32。
话虽如此,你很可能不会注意到任何不同......过早优化等等。我只想找到Guid
密钥,因为数据是。
答案 1 :(得分:7)
关于检索值的对象的实际大小是无关紧要的。值的查找速度更依赖于传入IEqualityComparer<T>
实例的两种方法的速度
编辑
很多人使用String作为说明较大对象大小会降低查找性能的理由。由于几个原因,必须采取一些盐。
IEqualityComparer<String>
,使字符串长度无关紧要。 答案 2 :(得分:3)
是和否。较大的字符串会增加字典的内存大小。较大的大小意味着计算散列大小的时间会稍长。
但担心这些事情可能是过早的优化。虽然它会慢一些,但你可能不会注意到它。
答案 3 :(得分:1)
显然确实如此。这是一个很好的测试:Dictionary String Key Test
答案 4 :(得分:1)
答案 5 :(得分:1)
请参阅Performance - using Guid object or Guid string as Key了解类似问题。您可以使用备用密钥对其进行测试。