Где Словарь <,>. SetCapacity (int newCapacity)?

Если я хочу добавить много элементов в Dictionary сразу, и я знаю (приблизительный) номер заранее, он быстрее и эффективнее с точки зрения памяти и процессора, если я устанавливаю начальную емкость, используя соответствующие перегрузка конструктора.

В случае, когда я тестировал, используя 300 000 записей, если я задал емкость словаря, скажем, 300 000, он примерно на 25% быстрее, чем если бы он остался неинициализированным.

Теперь, что я могу сделать, если у меня есть уже построенный, опустошенный словарь, который мне нужно заполнить множеством предметов? Предположим, что это, например, a readonly, которую я не могу переназначить с помощью нового экземпляра Dictionary. Я не вижу ничего, что влияет на способность уже построенного Словаря в документации. Что-то вроде, например, a Clear(int newInitialCapacity) было бы хорошо.

Мне повезло?

Ответ 1

Похоже, что ответ: Да, мне не повезло. Уже построенная емкость словаря не может быть изменена, ну, конечно, конечно, добавив элементы один за другим.

Если только .net Dictionary имел метод AddAll(..), похожий на Java putAll, тогда Я мог бы оставить это до ума от разработчика Dictionary.

Ответ 2

Вы указываете "Не видите ничего, что влияет на емкость уже построенного Словаря в документации".

В соответствии с документацией пропускная способность не reset при очистке.

Dictionary.Clear Method

Свойство Count установлено в 0, а ссылки на другие объекты из элементы коллекции также выпущены. Емкость остается без изменений.

У вас есть словарь, в котором вы заполняете более 300 000 предметов и настройку производительности, и у вас нет возможности для добавления нового словаря?

Возможно, стоит проверить KeyCollection, поскольку вы можете переопределить ClearItems.

Метод KeyedCollection.ClearItems

В HashSet есть TrimExcess.

Метод HashSet.TrimExcess