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

时间:2009-10-08 17:56:46

标签: c# performance dictionary

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

GUID(或更大的密钥)等大密钥会降低字典的性能,例如通过密钥检索对象?

谢谢, 安德烈

6 个答案:

答案 0 :(得分:14)

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

话虽如此,你很可能不会注意到任何不同......过早优化等等。我只想找到Guid密钥,因为数据

答案 1 :(得分:7)

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

  • GetHashCode()方法
  • 等于()

编辑

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

  • 上述字符串方法的性能随着默认比较器的字符串大小的增加而性能下降。仅仅因为它对System.String来说是正确的并不意味着它通常是正确的
  • 您可以轻松地编写不同的IEqualityComparer<String>,使字符串长度无关紧要。

答案 2 :(得分:3)

是和否。较大的字符串会增加字典的内存大小。较大的大小意味着计算散列大小的时间会稍长。

但担心这些事情可能是过早的优化。虽然它会慢一些,但你可能不会注意到它。

答案 3 :(得分:1)

显然确实如此。这是一个很好的测试:Dictionary String Key Test

答案 4 :(得分:1)

我做了一个快速的谷歌搜索,发现了这篇文章。

http://dotnetperls.com/dictionary-string-key

它确认通常较短的键比较长的键表现更好。

答案 5 :(得分:1)

请参阅Performance - using Guid object or Guid string as Key了解类似问题。您可以使用备用密钥对其进行测试。