Comments 12
А почему например нельзя проанализировать все вызовы метода .Adapt и сгенерировать маппинги для моделей которые там?
Добрый день! В целом существенных различий между маппингами других моделей и модели User из примера - нет. На сколько я понимаю, Вы хотите сказать, что вызов Extension метода Adapt в некоторых случаях будет работать не хуже сгенерированного метода. С этим я согласен, и в некоторых тестах я это наблюдал. Однако в целом сгенерированные методы в большинстве случаев работают чуть быстрее. Проблема в том, что тестировать мапперы на каждую модель и выбирать оптимальный вариант - долго и дорого. Я хотел дать некоторый универсальный способ, который подойдет в большинстве случаев для решения данной проблемы.
А есть понимание, за счёт чего Mapster_MapUserToDomain выделяет настолько меньше памяти?
Спасибо.
Сейчас однозначно сказать не могу. Сам метод Adapt<TDest> в Mapster работает через LambdaExpression с дальнейшим его хэшированием и переиспользованием. Возможно, тут удается избежать лишнего выделения памяти, но странно, что получилась такая большая разница с маппингами других типов. Думаю, я смогу провести повторное тестирование и дать ответ позднее
Да не может за счёт этого быть такой выигрыш против ручного мэппинга.
Если пулит стринг билдеры, к примеру - то ещё возможно, но всё равно. Вопрос, как в этом случае с потокобезопасностью.
Не пробовали открыть экзешник каким-нибудь декомпайлером и попытаться найти, что конкретно происходит в этом случае?
Или даже отдебажить с степ-ином в библиотеки?
Не попробуете? - очень уж любопытно.
...но вообще я бы проверил - а результат мэппинга совпадает с ручным? строки идентичные?
Да, вопрос интересный, обязательно проверю. Возможно, Вы правы и ответ в реализации конкатинации строк FName и LName. Еще думаю есть вариант, что банально при маппинге через мапстер в тесте не сработали правила перевода конвертации Name, и этих преобразований вообще не было. В любом случае я добавлю к статье полученные результаты после перепроверки
Вообще, я и сам бы занялся, не опубликуете полный солюшн, в готовом к дебагу состоянии?
Конечно! Думаю, я смогу опубликовать проект, но сначала хотел бы проверить вариант, что при маппинге через мапстер Adapt не сработали правила преобразования. В этом случае нужно будет обновить результаты Mapster_MapUserToDomain
Здорово, спасибо. Буду ждать результатов :)
Я провел новое тестирование и исправил ошибку. Спасибо за Вашу внимательность. В Mapster_MapUserToDomain не применился конфиг маппинга поля Name. Сейчас память для всех 4 маппингов выравнилась, а время выполнения метода Adapt чуть возросло, но не превысило время AutoMapper. В скором времени я обновлю статью и эта правка попадет в нее.
DotNet быстрый маппинг моделей с Mapster Tool