Почему String.GetHashCode () по-разному реализованы в 32-битной и 64-битной версиях CLR?

Каковы технические причины разницы между 32-битной и 64-битной версиями string.GetHashCode ()?

Что еще более важно, почему 64-битная версия, кажется, завершает свой алгоритм, когда встречает символ NUL? Например, все следующие выражения возвращают истину при запуске в 64-битной среде CLR.

"\0123456789".GetHashCode() == "\0987654321".GetHashCode()
"\0AAAAAAAAA".GetHashCode() == "\0BBBBBBBBB".GetHashCode()
"\0The".GetHashCode() == "\0Game".GetHashCode()

Такое поведение (ошибка?) Проявляется как проблема производительности, когда мы использовали такие строки в качестве ключей в Словаре.

20
задан Ilian 25 July 2011 в 08:10
поделиться