Ключевые показатели для словаря

Является ли клавиша string быстрее, чем клавиша int в Dictionary<,>?

Ответы

Ответ 1

Нет. Прежде всего, Dictionary [ОБНОВЛЕНО] использует хеш-код ключей, чтобы найти их во внутренней памяти, а не в ключах. И Hashcode - это int. Для int это просто значение int, для string оно должно быть сгенерировано.

Таким образом, использование int выполняется немного быстрее.


Фактически генерация хеш-кода для строки - довольно сложный процесс (фрагмент с использованием Reflector) [Надеюсь, это не воспринимается как нарушение авторских прав, потому что оно НЕ):

fixed (char* str = ((char*) this))
{
    char* chPtr = str;
    int num = 0x15051505;
    int num2 = num;
    int* numPtr = (int*) chPtr;
    for (int i = this.Length; i > 0; i -= 4)
    {
        num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
        if (i <= 2)
        {
            break;
        }
        num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1];
        numPtr += 2;
    }
    return (num + (num2 * 0x5d588b65));
}