Длина ключа влияет на исполнение Словаря?

Поскольку Сборщик "мусора" не может собрать то, что не выделила управляемая среда. Поэтому любой вызов к неуправляемому API, который приводит к выделению памяти, должен быть собран старомодным способом.

7
задан Andrej 8 October 2009 в 17:56
поделиться

6 ответов

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

При этом вы, скорее всего, не заметите никакой разницы ... преждевременная оптимизация и все такое.

14
ответ дан 6 December 2019 в 06:37
поделиться

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

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

3
ответ дан 6 December 2019 в 06:37
поделиться

Очевидно, да. Вот хороший тест: Тест ключа словарной строки

1
ответ дан 6 December 2019 в 06:37
поделиться

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

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

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

1
ответ дан 6 December 2019 в 06:37
поделиться

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

1
ответ дан 6 December 2019 в 06:37
поделиться

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

  • GetHashcode ()
  • Equals ()

EDIT

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

  • Производительность вышеупомянутых методов для String снижается по мере увеличения размера строки для компаратора по умолчанию. Просто потому, что это верно для System. Строка в целом не означает, что это правда
  • Вы могли бы так же легко написать другой IEqualityComparer таким образом, чтобы длина строки не имела значения.
7
ответ дан 6 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

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