Предположим, что у нас есть 2 варианта: пойтисловарь размер явной инициализации: плюсы и минусы
public static Dictionary<TK, TV> GetDictionary(IEnumerable<TK> keys)
{
var result = new Dictionary<TK, TV>();
...
return result;
}
против
public static Dictionary<TK, TV> GetDictionary(IEnumerable<TK> keys)
{
var result = new Dictionary<TK, TV>(keys.Count());
...
return result;
}
Каковы плюсы и минусы каждого из них? Недавно в нашей команде у нас был спор.
Возможные минусы явного размера
- Если количество элементов мало, то это не имеет никакого смысла.
- Если количество элементов велико, тогда Count() стоит дорого и ведет к полному перечислению
IEnumerable
. - Изменение размера словаря является эффективным и быстрым - нет необходимости его оптимизировать.
Возможные плюсы явного размера
- Precise получает номер производительности потому словарь изменение размеров дорого и лучше избегать.
Какой вариант лучше или есть какое-нибудь эмпирическое правило?
Любые доказательства, на самом деле имеющие какое-либо значение в вашем случае? Я был бы очень удивлен. – Baldrick
@ Baldrick Я спрашиваю об общем случае, поэтому ваш вопрос - это то же самое, и мне все равно, не так ли? –
Общее правило - сначала использовать простейшую форму, которая почти наверняка будет прекрасной. Если в словаре есть проблемы с производительностью, только тогда вы должны рассмотреть возможность микрооптимизации на этом уровне. Кстати, в случае, когда вы упоминаете, вы можете конвертировать IEnumerable в словарь с использованием linq. – Baldrick