18

私のDAL(ORMなど)にこのオブジェクトがあるとします

public class Student
{
   public string Name {get;set;}
   public string Address {get;set;}
   public string Phone {get;set;}
   public Parent Parent {get;set;}
}
public class Parent
{
   public string Name {get;set;}
   public string Address {get;set;}
   public string Phone {get;set;}
}

そして、私はこのようなViewModelを持っています

public class StudentDetailVM
{
   public string Name {get;set;}
   public string Address {get;set;}
   public string Phone {get;set;}

   public string ParentName {get;set;}
   public string ParentPhone {get;set;}
}

その場合、オブジェクトを平らにする必要があります。これは、Automapper や ValueInjector などのツールを使用して行うことも、手動で行うこともできます。処理するクラスが多数ある場合、これは面倒な作業ですが、3 つのアプローチすべての間にパフォーマンスと開発者の効率のトレードオフがあるようです。

Automapper 、 Valueinjector、手動マッピングをいつ使用するかについてのガイダンスを探しています。手動マッピングが最速だと確信していますが、どれくらいですか?

  1. 一部のシナリオは他のシナリオよりもはるかに遅い/速いですか (例: 平坦化など)?

  2. レイヤー間でオブジェクトをマッピングするためのハイブリッド アプローチを行うことは理にかなっていますか?

私が尋ねる理由は、emitmapper と呼ばれる Codeplex プロジェクトが automapper のパフォーマンスの問題に対処するために作成されたためです。automapper が大きなクラスをマップするのに最大 .5ms かかる可能性があるというコメントを見たのを覚えています。(参照が必要)

また、90 ミリ秒以上ではなく 70 ミリ秒以内に読み込まれると、ユーザーがサイトにとどまる可能性が高くなるという記事を見たことも覚えています。(私もこのリンクを探しています)。オートマッパーがページ読み込み時間のほとんどをネットワーク遅延と合わせて消費している場合、オートマッパーを使用せずに大量のページに手動クラスを作成し、ハイブリッド アプローチを使用する可能性があると考えています。

結論: 私は自分でテストを実行しますが、再利用可能なガイドラインとして使用できる正確な結果を作成するには、.NET の内部について十分に知りません。

4

1 に答える 1

4

結論: 私は自分でテストを実行しますが、再利用可能なガイドラインとして使用できる正確な結果を作成するには、.NET の内部について十分に知りません。

.NET 内部について知る必要はありません。必要なパフォーマンス要件と、通常の使用方法がどのようになるかを知る必要があります。さまざまな方法で典型的な使用シナリオの下でコードをプロファイリングし、パフォーマンス要件を満たし、保守が最も簡単なものを選択します (つまり、必ずしも最もパフォーマンスの高いものを選択する必要はありません。他の基準もあります)。

于 2011-11-14T14:50:42.783 に答える