Учитывая, что .Net обладает способностью обнаруживать битту через IntPtr (просмотр рефлектора в хорошем количестве помечается небезопасным, хотя - позор). Я думал, что GetHashCode, возвращающий int, потенциально близорук.
Я знаю, что в конечном итоге с хорошим алгоритмом хэширования миллиарды перестановок, предлагаемые Int32, абсолютно адекватны, но тем не менее, чем меньше возможный набор хэшей, тем медленнее хешируются ключевые поиски, так как потребуется более линейный поиск.
В равной степени - я единственный, кто считает это забавным:
struct Int64{
public override int GetHashCode()
{
return (((int) this) ^ ((int) (this >> 0x20)));
}
}
Пока Int32 просто возвращает this
.
Если IntPtr не может быть оспорено из-за проблем с производительностью, лучше ли IHashCode, который реализует IEquatable и т.д.?
Как наши платформы становятся все больше и больше с точки зрения объема памяти, размера диска и т.д., наверняка, дни с 32-битными хэшами достаточно потенциально пронумерованы?
Или это просто случай, когда накладные расходы, связанные либо с абстрагированием хеша через интерфейсы, либо с адаптацией размера хэша в соответствии с платформой, перевешивают любые потенциальные выгоды?