.Net には IntPtr を介してビット数を検出する機能があることを考えると (リフレクターを調べると、かなりの量が安全でないとマークされていますが、残念です)、int を返す GetHashCode は近視眼的である可能性があると考えていました。
最終的には、優れたハッシュ アルゴリズムを使用すれば、Int32 によって提供される数十億の順列が完全に適切であることはわかっていますが、それでも、可能なハッシュのセットが狭いほど、より線形な検索が必要になるため、ハッシュされたキーの検索が遅くなります。
同様に、これが面白いと思うのは私だけですか?
struct Int64{
public override int GetHashCode()
{
return (((int) this) ^ ((int) (this >> 0x20)));
}
}
一方、Int32 は単純に を返しますthis
。
パフォーマンスの問題で IntPtr が問題外である場合、おそらく IEquatable などを実装する IHashCode の方がよいでしょうか?
私たちのプラットフォームがメモリ容量、ディスク サイズなどの面でますます大きくなるにつれて、32 ビット ハッシュで十分な時代は確実に長くなる可能性があります。
それとも、インターフェースを介してハッシュを抽象化するか、プラットフォームに応じてハッシュのサイズを調整することに伴うオーバーヘッドが、潜在的なパフォーマンス上の利点を上回っているという単純なケースですか?