我花了一些時間比較這三個映射器,並且有趣的是爲什麼如此大的性能在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