我花了一些时间比较这三个映射器,有趣的是为什么 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
在第一个发射映射器测试中 - 它是每次创建的,在第二个中 - 一个用于所有转换的映射器。
考虑到这一点,结果作为 valueinjecter(也作为 automapper)比发射映射器慢 100 倍。如此巨大的性能差异的原因是什么?至于我,对象到对象映射器与手写映射器相比不能花费太多时间,因为它是项目的瓶颈(例如,如果我们需要映射对象集合)。
目前我正在考虑使用发射映射器,但我还没有准备好决定的原因只有一个:第一个开发人员根本不支持发射映射器,但我不确定这是否非常重要(可能性非常低需要一些额外的功能)。