現在のアプリケーションでは、ユーザーに表示するかなり長いテーブルを生成しています。@Html.DisplayFor の使用を追跡したところ、いくつかの深刻なパフォーマンスの問題が見られましたが、その理由は完全にはわかりません。
編集: コード サンプルをより簡潔で再現可能な設定に置き換えました。
問題を切り分けるために、ビジュアル スタジオのすべてのデフォルト設定を使用して、認証なしで新しい asp.net コア MVC プロジェクトを作成しました。ビューモデルを次のように作成しました。
public class TestingViewModel
{
public int Id { get; set; }
public string TextValue1 { get; set; }
public string TextValue2 { get; set; }
}
次に、ビュー モデルにデータを入力してビューに渡すコントローラーを追加しました。
public IActionResult TestThings()
{
var list = new List<TestingViewModel>();
for(var i = 0; i < 1000; i++)
list.Add(new TestingViewModel {Id = i, TextValue1 = "Test", TextValue2 = "Test2"});
return View(list);
}
ビューは、データを表示するために最低限必要なものです。
@model List<DisplayForTest.ViewModels.TestingViewModel>
@foreach (var item in Model)
{
@Html.DisplayFor(m => item.Id)
@Html.DisplayFor(m => item.TextValue1)
@Html.DisplayFor(m => item.TextValue2)
}
このコードを実行すると、実行に 1 秒以上かかります。犯人は DisplayFor です。次のようにビューを変更すると:
@model List<DisplayForTest.ViewModels.TestingViewModel>
@foreach (var item in Model)
{
@item.Id
@item.TextValue1
@item.TextValue2
}
これは 13 ミリ秒でレンダリングされます。DisplayFor がレンダリングに膨大な時間を追加していることは明らかです... 私の PC では、呼び出しごとに約 0.4 ミリ秒です。それは単独では悪くありませんが、リストやその他のものにとってはかなり悪い選択になります.
本当にDisplayFor
それだけで遅いですか?それとも私の使い方が悪いのでしょうか?