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

вы можете разработать, чтобы использовать другие псевдорежимы общего назначения: t0..t19

bp your-address "r$t1=your-other-address; ba w4 @$t1 /1 \"dd @$t1;gc\""
16
задан Mark T 21 April 2011 в 11:42
поделиться

1 ответ

Нет. Прежде всего, Dictionary [ОБНОВЛЕНО] использует хеш-код ключей, чтобы найти их во внутренней памяти, а не ключи. И хэш-код является 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));
}
21
ответ дан Aliostad 21 April 2011 в 11:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: