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