5

私が理解できる限り、ビューモデルを使用するとWeb開発を行うことができます. ローカライズされた文字列で必要なプロパティのみを表示するためにこのアプローチを使用できるという意味で、生活はずっと楽になります。また、mvc3 ビュー モデルで jquery 検証などを使用しています。

私のWebアプリケーションで本当のボトルネックが発生しているので、今は疑問です。このようにすべてのオブジェクト(20個)を照会すると

 List<Domain.Property> data = session.Query<Domain.Property>().ToList();    
 return PropertyViewModel.FromDomainModel(data);

そして、その Property オブジェクトのリストは、このような Property オブジェクトのリストを期待する FromDomainModel である ViewModel に送信されます

List<PropertyViewModel> dataVm = new List<PropertyViewModel>();
{
            foreach (Property p in x)
            {
                dataVm.Add(new PropertyViewModel(p));
            }
            return dataVm;
}

現在、私が使用している同じクラスにいます

public PropertyViewModel(Property x)
        {
            Id = x.Id;
            Created = x.Created;
            Title = x.Title;
             ....
            Photo = x.Photos.First();
}

しかし、このアプローチを使用して、オブジェクトのコレクションをビューモデルに送信し、そこから同じビューモデルが返され、必要なプロパティがほとんどないため、不思議なことに(少なくとも私にとっては)、複数のエンティティの負荷が発生し、継続時間が大幅に増加します。

さらに情報が必要な場合。問い合わせてください。

また、より良い解決策を知っている場合は、共有してください。

更新: ドメイン モデルを使用する場合は 20 個のエンティティが読み込まれ、上記のビューモデルを使用する場合は 67 個のエンティティが読み込まれ、パフォーマンスが大幅に低下します。

4

3 に答える 3

3

ドメイン モデルとビュー モデルの間のマッピングに実際に追加の時間が費やされますが、この時間は途方もなく非常に小さく、ボトルネックにはなりません。C# でのプロパティ セッターの呼び出しは非常に高速な操作であり、たとえばデータベース呼び出しと比較すると、まったく無視できます。

したがって、アプリケーションのパフォーマンスになんらかの影響を与えることを心配することなく、引き続きビュー モデルを使用してください。

于 2012-05-29T06:28:12.017 に答える
1

ビューが異なれば、ビューモデルも異なります。ビューに必要のない大量のデータがある場合は、そのビューのビューモデルに含めないでください。

また、選択したN + 1の問題を確認し、参照されるエンティティの取得をより効率的にする必要がない場合は、クラスとコレクションにバッチサイズを設定することを検討してください。

于 2012-05-29T08:47:57.223 に答える
0

ViewModelsが原因でボトルネックに気付くことはありません。代わりに、データベースへの呼び出しのパフォーマンスの問題のように聞こえます。n+ 1の問題は、ORMの非常に一般的なパフォーマンスの問題です。データベースへの呼び出しの数を確認する必要があります。 Entity Framework Profilerは、EFにとって非常に優れたデバッガーであり、データベースへの呼び出し回数を表示し、パフォーマンスが良くない場合は、それを改善する方法を提案します。

于 2012-05-29T18:11:16.890 に答える