Я потратил некоторое время на сравнение этих трех картографов, и интересно, почему столь большой разброс производительности между emitmapper и любым из инжекторов или автоматов (последние два сопоставимы по производительности). Из контрольного теста в решении 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
Также некоторые ориентиры от инжектора-инжектора, запущенного с добавленным 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
Там, где в первом испускании теста картографа, он был создан каждый раз, во втором - один картограф для всех преобразований.
Принимая это во внимание, получим результат как valueinjecter (также как automapper) медленнее, чем в 100 раз, чем испускать mapper. В чем причина столь большой разницы в производительности? Что касается меня, то объект для сопоставления объектов не может занимать много времени по сравнению с рукописным картографом, поскольку он является узким местом проекта (если нам нужно сопоставить коллекцию объектов, например).
В данный момент я думаю об использовании emit mapper, но только одна причина, по которой я не готов принять решение: emit mapper вообще не поддерживается первыми разработчиками, но я не уверен, что это очень важно ( очень низкая возможность выполнения некоторых дополнительных функций).