Emit mapper vs valueinjecter или autopper производительность
Я провел некоторое время, сравнивая эти три картографа, и интересно, почему такая большая разница в производительности между emitmapper и любым из valueinjecter или automapper (последние два сопоставимы по производительности). Из бенчмарк-теста в решении emitmapper (1000000 итераций):
Auto Mapper (simple): 38483 milliseconds
Emit Mapper (simple): 118 milliseconds
Handwritten Mapper (simple): 37 milliseconds
Auto Mapper (Nested): 53800 milliseconds
Emit Mapper (Nested): 130 milliseconds
Handwritten Mapper (Nested): 128 milliseconds
Auto Mapper (Custom): 49587 milliseconds
Emit Mapper (Custom): 231 milliseconds
Также некоторые тесты из valueinjecter, запущенные с добавленным emitmapper (для 10000 итераций):
Convention: 00:00:00.5016074
Automapper: 00:00:00.1992945
Smart convention: 00:00:00.2132185
Emit mapper(each time new mapper): 00:00:00.1168676
Emit mapper(one mapper): 00:00:00.0012337
Там в первом тесте emit mapper - он создавался каждый раз, во втором - один маппер для всех преобразований.
Принимая это во внимание, получим результат как valueinjecter (также как autopper) медленнее, чем в 100 раз, чем emit mapper. В чем причина такой огромной разницы в производительности? Что касается меня, то сопоставление объекта с объектным сопоставителем не может занимать столько времени по сравнению с рукописным преобразователем, сколько является узким местом проекта (если, например, нам нужно сопоставить коллекцию объектов).
В этот момент яЯ думаю об использовании Emit Mapper, но только одна причина, почему яя не готов принять решение: emit mapper вообще не поддерживается первыми разработчиками, но яЯ не уверен, что это очень важно (очень малая потребность в некоторых дополнительных функциях).