【发布时间】:2011-07-25 08:10:48
【问题描述】:
32 位和 64 位版本的 string.GetHashCode() 存在差异背后的技术原因是什么?
更重要的是,为什么 64 位版本在遇到 NUL 字符时似乎会终止其算法?例如,以下表达式在 64 位 CLR 下运行时均返回 true。
"\0123456789".GetHashCode() == "\0987654321".GetHashCode()
"\0AAAAAAAAA".GetHashCode() == "\0BBBBBBBBB".GetHashCode()
"\0The".GetHashCode() == "\0Game".GetHashCode()
当我们在字典中使用此类字符串作为键时,这种行为(错误?)表现为性能问题。
【问题讨论】:
-
非常有趣的发现。事实上,这很可能是一个错误 - 我无法想象这是预期的行为,除非哈希函数不适用于 .Net 字符串。