7

現在のアプリケーションでは、ユーザーに表示するかなり長いテーブルを生成しています。@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それだけで遅いですか?それとも私の使い方が悪いのでしょうか?

4

2 に答える 2