Comments 10
Очень медленный бенчмарк, пропадает всё желание потыкать в код.
UPD: 2 теста из 3 не проходят у меня лично.
Перечитал статью, но так и не увидел - точно ли проблема и решение в
Мы можем значительно повысить производительность, просто заменив линейный поиск в массиве/списке на поиск по Dictionary, а точнее, FrozenDictionary. Это оптимизированный для поиска неизменяемый словарь, представленный в .NET 8.
Ведь решение на самом деле в другом и по коду это видно.
Код точно автором написан?
Тесты сломались, потому как в оригинальном маппере потерялся формат даты при парсинге. Заодно добавил тесты на мапперы со структурами.
Типичный O(n^2), по хорошему, такой код не должны пропускать еще на этапе code review. Все, что после Dictionary, по сути экономия на спичках, и должно применяться только в том случае, если это действительно hot path и профилирование показывает, что бутылочное горлышко все еще именно в мэппинге. Иначе может получиться так, что время потраченное на эту оптимизацию и дальнейшую поддержку кода будет стоить дороже сэкономленных за счет оптимизации эндпоинта вычислительных ресурсов.
Вы даже не представляете, что может твориться в западном стреднестатистическом не продуктовом энтерпрайзе...
Не очень давно была статья по внедрению Option Pattern в ASP.NET приложении, что вроде бы тоже азы (только уже фреймворка), но как показала практика даже люди с 10 годами опыта в программировании в солидных западных компаниях не знакомы не IOption не со способами их регистрации. Поэтому подобное и гораздо более «смешное» не то, что не может, а уже присутствует в кодовой базе довольно солидных корпорации.
Сравнивали ли вы ваш код с популярными Automapper, Mapster и прочими?
Нет, такой цели никогда не было, проект был на ручномапперах. Да и кода меньше точно не будет и работать оно быстрее не станет.
Оба утверждения не верные. Mapster умеет генерировать код мапперов, работает оно точно также, как и написанный код вручную. Сокращает ли количество рутинного кода? Да. Тут больше ориентируются на принятые в проекте подходы, убеждения лида, и особенности маппинга. Если они по большей части сложные и кастомные, толку не будет. Если они в основном рутинные, перекладывание значений из полей, то профит есть и не малый, если DTO много.
Оптимизация небрежно написанного маппера