Влияет ли длина ключа на производительность словаря?

Я буду использовать словарь в проекте .NET для хранения большого количества объектов. Поэтому я решил использовать GUID-строку в качестве ключа, чтобы обеспечить уникальные ключи для каждого объекта.

уменьшает ли большой ключ, такой как GUID (или даже больше), производительность словаря, например, для извлечения объекта через его ключ?

спасибо, Андрей!--1-->

6 ответов


Я бы рекомендовал использовать фактический Guid, а не строковое представление Guid. Да, при сравнении строк длина влияет на количество необходимых операций, так как она должна сравнивать строки по символам (как минимум; это запрещает любые специальные параметры, такие как IgnoreCase). Фактический Guid даст вам только 16 байт для сравнения, а не минимум 32 в string.

это, как говорится, вы, скорее всего, не собирается заметьте любую разницу...преждевременная оптимизация и все такое. Я бы просто пошел на Guid ключ так это то, что данные is.


фактический размер объекта относительно получения значений не имеет значения. Скорость поиска значений намного больше зависит от скорости двух методов на пройденном в IEqualityComparer<T> экземпляр

  • GetHashcode ()
  • Equals ()

редактировать

многие люди используют строку в качестве оправдания того, что больший размер объекта снижает производительность поиска. Это должно быть принято с солью для ряд причин.

  • производительность вышеуказанных методов для снижения производительности строки по мере увеличения размера строки для компаратора по умолчанию. Просто потому, что это верно для системы.String не означает, что это правда вообще
  • вы могли бы так же легко написать другой IEqualityComparer<String> таким образом, что длина строки не имеет значения.

да и нет. Большие строки увеличивают объем памяти словаря. И большие размеры означают немного больше времени для расчета размеров хэша.

но беспокоиться об этих вещах, вероятно, преждевременная оптимизация. Хотя это будет медленнее, это не то, что вы, вероятно, действительно заметите.


по-видимому, это так. Вот хороший тест: Тест Ключа Строки Словаря


Я сделал быстрый поиск Google и нашел эту статью.

http://dotnetperls.com/dictionary-string-key

Это подтверждает, что обычно более короткие клавиши работают лучше, чем более длинные.


посмотреть производительность-использование объекта Guid или строки Guid в качестве ключа для аналогичного вопроса. Вы можете протестировать его с помощью альтернативного ключа.