Gre*_*ech 19
我无法向您提供有关质量的任何细节(尽管我认为这是非常好的,因为字符串是框架的核心类之一,可能被用作哈希键).
但是,关于稳定性,在不同版本的框架上生成的哈希代码不保证是相同的,并且它在过去已经改变,所以你绝对不能依赖于版本之间的哈希代码是稳定的(参见此处它在1.1和2.0之间变化的引用.实际上,它甚至在同一框架版本的32位和64位版本之间也有所不同; 来自文档:
GetHashCode返回的值取决于平台.对于特定的字符串值,它在32位和64位版本的.NET Framework上有所不同.
Eld*_*rum 13
这是一个老问题,但我想通过提及这个关于哈希质量的微软错误做出贡献.
简介:在64b上,当字符串包含'\ 0'字节时,哈希质量非常低.基本上,只会对字符串的开头进行哈希处理.
如果像我一样,你必须使用.Net字符串来表示二进制数据作为高性能字典的关键,你需要注意这个bug.
太糟糕了,这是一个WONTFIX ...作为旁注,我不明白当代码包括时,他们怎么能说修改哈希码是一个重大改变
// We want to ensure we can change our hash function daily.
// This is perfectly fine as long as you don't persist the
// value from GetHashCode to disk or count on String A
// hashing before string B. Those are bugs in your code.
hash1 ^= ThisAssembly.DailyBuildNumber;
Run Code Online (Sandbox Code Playgroud)
并且无论如何,在x86/64b中哈希码已经不同了.
| 归档时间: |
|
| 查看次数: |
8985 次 |
| 最近记录: |