Борода бывшего программиста
193 subscribers
47 photos
2 files
126 links
Сейчас рук. отдела в Озоне, ранее директор по разработке idp.zyfra.com
leotsarev.ru
t.me/leotsarev
Много ссылок на статьи и нытья
Download Telegram
var dict = largeListOfItems.DistinctBy(item => item.KeyId).ToDictionary(item => item.KeyId);

Внезапно оказалось, что этот код:
1. Аллоцирует внутри DistinctBy хешмепу
2. Причем размер ее не берется из размера largeListOfItems, а задается дефолтный, т.е. по мере прохождения по листу несколько раз реаллоцируется
3. DistinctBy наружу отдает IEnumerable, следовательно ToDictionary не знает размера входящей коллекции и реаллоцирует словарь несколько раз.

Поскольку лист большой, это несколько раз оказывается в Large Object Heap и благополучно там живет до следующего Gen2

Нужен вариант ToDictionary c встроенным Distinct (ну или руками его написать)
https://github.com/dotnet/runtime/issues/113096
👍2
Хейтеры дотнета передают
😁5