2

テーブルを含むビューをレンダリングする MVC3 ページがあります。このテーブルには、月の各日を表す列があり、7 つの行があり、それぞれが組織の部門を表しています。

表の各セルには入力テキストボックスがあり、ユーザーはエネルギー使用量を表す数値を入力する必要があります。

クラスモデルは次のようになります。

public class EnergySheet
{
    public DateTime Month { get; set; }
    public List<DepartmentValue> DepartmentValues { get; set; }
}

public class DepartmentValue
{
    public int DepartmentId { get; set; }
    public string DepartmentName { get; set; }
    public List<DayValue> DayValues { get; set; }
}

public class DayValue
{
    public DateTime Date { get; set; }
    public decimal EnergyUsage { get; set; }
}

ビューは次のようにレンダリングされます。

EnergySheet.cshtml:

@model EnergySheet

@using(Html.BeginForm()){
    <table>
        <tbody>
            @Html.EditorFor(x => x.DepartmentValues)
        </tbody>
    </table>
    <input type="submit" value="Save" />
}

DepartmentValue.cshtml:

@model DepartmentValue
<tr>
    @Html.EditorFor(x => x.DayValue)
</tr>

DayValue.cshtml

@model DayValue
<td>
    @Html.EditorFor(x => x.EnergyUsage)
</td>

問題

これはすべて正常にレンダリングされ、サーバーにポストバックされたときにモデルが正しくバインドされます。ただし、問題はパフォーマンスです。約 200 の入力フィールドを含むグリッドのページをレンダリングするのに 10 ~ 15 秒かかります。

リリース モードで実行していることを確認しましたが、Web.config も<compilation debug="false">そうです。そのため、ビュー パスがキャッシュされていなくても問題はありません。クアッド i7、16GB など、十分に強力なマシンを使用しています。

修正を試みました

ビューテンプレート名を明示的に指定することで、エディターテンプレートの「自動反復」を置き換えて@Html.EditorFor(x => x.DepartmentValues)@Html.EditorFor(x => x.DepartmentValues, "DepartmentValues")まし@Html.EditorFor(x => x.DayValue)@Html.EditorFor(x => x.DayValue, "DayValue")これは、この投稿で説明されているように、テンプレート内のコレクションを手動で繰り返すことも意味します。これにより、パフォーマンスの問題 (ページが即座にレンダリングされる) は解決されますが、自動モデル バインディングはすべて失われます。

私の質問は、エディター テンプレートの自動レンダリングが本当にこれほど遅くなるべきかということです。それとも私は何か間違ったことをしていますか?わずか 200 個の入力フィールドしかないページでは、レンダリング エンジンにそれほど負担をかけるべきではないでしょうか?

4

0 に答える 0