【发布时间】:2010-12-05 02:22:15
【问题描述】:
我将在 .NET 项目中使用 Dictionary 来存储大量对象。因此我决定使用 GUID 字符串作为键,以确保每个对象的键都是唯一的。
诸如 GUID 之类的大键(甚至更大的键)是否会降低字典的性能,例如用于通过其键检索对象?
谢谢, 安德烈
【问题讨论】:
标签: c# performance dictionary
我将在 .NET 项目中使用 Dictionary 来存储大量对象。因此我决定使用 GUID 字符串作为键,以确保每个对象的键都是唯一的。
诸如 GUID 之类的大键(甚至更大的键)是否会降低字典的性能,例如用于通过其键检索对象?
谢谢, 安德烈
【问题讨论】:
标签: c# performance dictionary
我建议使用实际的Guid 而不是Guid 的字符串表示。是的,在比较字符串时,长度确实会影响所需操作的数量,因为它必须逐个字符地比较字符串(至少;这禁止任何特殊选项,如 IgnoreCase)。实际的 Guid 将只给您 16 个字节进行比较,而不是 string 中的最小值 32。
话虽如此,您很可能不会注意到任何差异......过早的优化等等。我只会选择Guid 键,因为这就是数据。
【讨论】:
对象的实际大小与检索值无关。查找值的速度更多地取决于传入的IEqualityComparer<T> 实例上的两个方法的速度
编辑
很多人都在使用 String 来证明较大的对象大小会降低查找性能。出于多种原因,必须对此持保留态度。
IEqualityComparer<String>,使字符串长度无关紧要。 【讨论】:
IEqualityComparer<T>(对于string 或其他任何东西)。然而,这不太可能。您所做的区分是学术性的,我想会导致更多的混乱而不是增加清晰度。
是的,不是的。较大的字符串会增加字典的内存大小。更大的大小意味着计算哈希大小的时间稍长。
但担心这些事情可能是过早的优化。虽然速度会慢一些,但您可能不会真正注意到。
【讨论】:
显然是这样。这是一个很好的测试:Dictionary String Key Test
【讨论】:
【讨论】:
请参阅Performance - using Guid object or Guid string as Key 了解类似问题。您可以使用备用密钥对其进行测试。
【讨论】: