密钥长度是否影响字典性能?

And*_*rej 7 c# performance dictionary

我将在.NET项目中使用Dictionary来存储大量对象.因此,我决定使用GUID字符串作为键,以确保每个对象的唯一键.

GUID(或更大的)之类的大键是否会降低Dictionary的性能,例如通过其键检索对象?

谢谢,Andrej

Ada*_*son 14

我建议使用实际Guid而不是字符串表示Guid.是的,在比较字符串时,长度确实会影响所需的操作数,因为它必须逐个字符地比较字符串(至少是这样;这是禁止任何特殊选项IgnoreCase).实际Guid将只给你16个字节进行比较,而不是最小的32个字节string.

话虽这么说,你很可能不会注意到任何不同......过早的优化和所有这些.我只想去的Guid关键,因为这数据是什么.


Jar*_*Par 7

关于检索值的对象的实际大小是无关紧要的.查找值的速度更依赖于传入IEqualityComparer<T>实例中两种方法的速度

  • GetHashCode的()
  • 等于()

编辑

很多人使用String作为说明更大的对象大小降低查找性能的理由.出于几个原因,必须采取一些盐.

  • 随着默认比较器的字符串大小增加,上述String方法的性能会降低性能.仅仅因为System.String是真的并不意味着它一般都是真的
  • 您可以轻松地以不同IEqualityComparer<String>的方式编写不同的字符串长度.

  • @Jared:是的,显然你是对的.你可以实现一个'IEqualityComparer <T>`(对于`string`或其他任何东西),它是O(1).但是,*极不可能*.你所做的区别是学术性的,我认为会引起更多混乱而不是增加清晰度. (5认同)
  • @Adam,我不是试图争论,但说String键大小对性能有直接影响是错误的.它可能是最可能的默认情况,但它是一个不正确的断言.您根本无法查看字典的Key类型并对查找的性能特征做出可靠的陈述.只知道IEqualityComparer <TKey>的详细信息可以为您提供此信息. (2认同)