鉴于 .Net 能够通过 IntPtr 检测位数(尽管通过反射器查看大量它被标记为不安全 - 耻辱)我一直认为 GetHashCode 返回一个 int 可能是短视的。
我知道最终使用一个好的散列算法,Int32 提供的数十亿个排列绝对足够,但即便如此,可能的散列集越窄,散列键查找越慢,因为需要更多的线性搜索。
同样——我是唯一一个觉得这很有趣的人吗:
struct Int64{
public override int GetHashCode()
{
return (((int) this) ^ ((int) (this >> 0x20)));
}
}
而 Int32 只是简单地返回this
.
如果 IntPtr 由于性能问题而无法解决,那么实现 IEquatable 等的 IHashCode 可能会更好?
随着我们的平台在内存容量、磁盘大小等方面变得越来越大,32 位散列足够的日子肯定已经屈指可数了吗?
还是仅仅是通过接口抽象出散列或根据平台调整散列大小所涉及的开销超过了任何潜在的性能优势?