我已经花了一些时间比较这三级映射器和有趣的是,为什么emitmapper任何valueinjecter或automapper(最后两个可比的性能)之间这么大的性能diffrenece。 从在emitmapper溶液(百万次迭代)基准测试:
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映射器试验 - 它是每次创建的,在第二 - 一个映射器,用于所有转化。
考虑到这一点,有结果作为valueinjecter(也作为automapper)中比在比发射映射器100倍慢。 什么是如此巨大的性能差异的原因是什么? 至于我反对的对象映射器不能花那么多时间与手写映射器,因为它是项目的一个瓶颈(如果我们需要映射例如对象的集合)。
在这一刻,我想使用发出映射器,但只有一个原因,我还没有准备好做出决定:发出全部由第一开发者在不支持映射器,但我不知道,这是非常重要的(可能性极低到的一些附加功能要求)。