私はこの3つのマッパーを比較するいくつかの時間を費やしてきた、それが面白いですなぜemitmapperとvalueinjecterまたはautomapperのいずれかの間のように大きなパフォーマンスのdiffrenece(最後の2つの性能によって、同等)。ベンチマークテストから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からいくつかのベンチマークは(10000回の反復のために)を加えemitmapperでrunned:最初の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
- それが作成されました毎回、すべてのコンバージョンの2番目のマッパーです。これを考慮
は、マッパーを発するよりも100倍よりも遅い(またautomapperなど)valueinjecterとして結果を有します。巨大なパフォーマンスの違いの理由は何ですか?私は(私たちは例えばオブジェクトのコレクションをマッピングするために必要がある場合)、それはプロジェクトのボトルネックになるようマッパーが手書きマッパーに比較するので、多くの時間を要したことができないオブジェクトへのオブジェクトの場合と同様。
私はemitマッパーを使用することを考えていますが、私が決定する準備ができていない理由は1つだけです。最初の開発者はまったくサポートしていないマッパーを発行しますが、 (いくつかの付加的な機能性を要求する可能性は非常に低い)。
あなたがテストしたかわからないときに、データから結論を引き出すことは本当に難しいです。 Automapperはリフレクションを使用して初期の自動マッピングを行い、結果をキャッシュします。それを繰り返すたびにその部分を元に戻すと、それはひどく実行できます。テストをどのように実行したかを示すと、より良い回答が得られる可能性が高くなります。 –
私はこのページのベースコードとして2番目の部分に使用しました:http://valueinjecter.codeplex.com/wikipage?title = SmartConventionInjection&referencedTitle = Home 私はemitmapperのホームページからemitmapperプロジェクトのベンチマークプロジェクトを使用しました。 http://emitmapper.codeplex.com)いくつかのベンチマークを提供するための – Igor
おかげで、私はAutomapperを使用しないように決定しました。それはすべてを大幅に減速させた。 – Peter