私はこの 3 つのマッパーを比較するのに時間を費やしましたが、emitmapper と valueinjecter または automapper のいずれか (最後の 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
また、追加されたemitmapper(10000回の反復)で実行されたvalueinjecterからのいくつかのベンチマーク:
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
最初にエミットマッパーテストがあり、毎回作成され、2番目にすべての変換に対して1つのマッパーが作成されました。
これを考慮して、値インジェクター (オートマッパーとしても) としての結果を、エミット マッパーよりも 100 倍遅くします。これほど大きなパフォーマンスの違いの理由は何ですか? 私にとって、オブジェクトからオブジェクトへのマッパーは、プロジェクトのボトルネックになるため(たとえば、オブジェクトのコレクションをマップする必要がある場合)、手書きのマッパーに比べてそれほど時間がかかりませんでした。
現時点では、エミットマッパーの使用を考えていますが、決定する準備ができていない理由は 1 つだけです: エミットマッパーは最初の開発者によってまったくサポートされていませんが、これが非常に重要かどうかはわかりません (可能性は非常に低いです)。いくつかの追加機能の要件に)。