我花了一些时间比较这三个映射器,并且有趣的是为什么如此大的性能在emitmapper和任何valueinjeter或automapper(后两个可比较的性能)之间存在差异。从在emitmapper溶液基准测试(百万次迭代):发送映射器vs valueinjecter或自动映射器性能
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次迭代):
在第一EMIT映射器测试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.0
那里 - 它被创建每一次,在第二 - 一个映射器的所有转换。
考虑到这一点,将结果作为值注入器(也称为自动映射器)比放映映射器的速度低于100倍。性能差异如此巨大的原因是什么?对于我来说,对象映射器与手写映射器相比不会花费太多时间,因为它是项目的瓶颈(例如,如果我们需要映射对象集合)。
在这一刻我正在考虑使用发射mapper,但只有一个原因,我没有准备好决定:第一个开发人员根本不支持发射mapper,但我不确定这是非常重要的(需要某些附加功能的可能性很低)。
当你不知道测试的内容时,很难从数据中得出结论。 Automapper使用反射来执行初始自动映射,然后缓存结果。如果每次迭代都重复这个部分,它可能表现不佳。如果您展示如何运行测试,您可能会得到更好的答案。 –
我用这个页面的第二部分作为基本代码:http://valueinjecter.codeplex.com/wikipage?title = SmartConventionInjection&referTitle =首页 第一部分我已经使用了emitmapper主页中的emitmapper项目的基准项目http://emitmapper.codeplex.com) – Igor
感谢您提供一些基准,使我决定不使用Automapper。它大大减缓了一切。 – Peter