Где Словарь <,>. 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