Недавно в моей фирме появилась новая тенденция, когда мы меняем IEnumerable на словарь с помощью простого преобразования LINQ следующим образом:
enumerable.ToDictionary(x=>x);
В основном мы делаем это, когда операция над коллекцией является Contains / Access, и, очевидно, словарь имеет лучшую производительность в таких случаях.
Но я понимаю, что преобразование Enumerable в словарь имеет свою стоимость, и мне интересно, в какой момент он начинает работать безубыточно (если это так), т.е. производительность IEnumerable
Contains / Access is равно ToDictionary
+ доступ / содержит.
Хорошо, я мог бы добавить, что нет доступа к базе данных, который может быть создан перечислимым из запроса к базе данных, и это тоже, и перечисляемое может быть отредактировано и после этого тоже.
Также было бы интересно узнать, как тип данных ключа влияет на производительность?
Обычно поиск может быть 2-5 раз, но иногда может быть и один. Но я видел такие вещи, как
Для перечисляемого:
var element=Enumerable.SingleorDefault(x=>x.Id);
//do something if element is null or return
для словаря:
if(dictionary.ContainsKey(x))
//do something if false else return
Это уже давно меня беспокоит.