1

私は 5 日前に始めた ASP.NET MVC 開発に非常に慣れていません。まさに研究開発段階と言えます。私は MVC の開発スタイルが気に入っていますが、私の友人の 1 人が、ASP.NET MVC のパフォーマンスは Reflection を使用しているため WebForms とは比較にならないと言ったときに、私の混乱が始まりました。例えば:

@Html.EditorFor(model => model.FieldName)

MVC はリフレクションを使用しています。彼によると、リフレクションを克服するには通常の HTML タグを使用する必要があります。例えば

<input id="FieldName" class="text-box single-line" type="text" value="" name="FieldName" data-val-required="FieldName is required." data-val="true" />

インターネットで検索して混乱して削除しようとしたところ、次のことがわかりました。

ASP.NET MVC のパフォーマンス
ASP.NET MVC でリフレクションではなくラムダを使用するのはなぜですか?
Web でのリフレクションとパフォーマンス

しかし、これらのトピックでは、通常の HTML を使用することでパフォーマンスが向上するかどうか、および MVC の大規模アプリケーションで最適な方法は何かを明確に教えてくれるわけではありません。

4

1 に答える 1

6

非反射バージョンの方が作業量が少ないため、より高速であることが事実上保証されています。ただし、その差はかなり小さいと予想していました。2 つの異なるテンプレートを使用していくつかの基本的なテストを行いました。

Html ヘルパーを使用したテンプレート 1:

@for (int i = 0; i < 10000; i++)
{
    @Html.EditorFor(model => model.FieldName)  
}

プレーン HTML を使用したテンプレート 2:

@for (int i = 0; i < 10000; i++)
{
    <input id="FieldName" class="text-box single-line" type="text" value="" name="FieldName" data-val-required="FieldName is required." data-val="true" />
}

パフォーマンスをテストするために、MiniProfilerライブラリを使用しました。これにより、テンプレートのレンダリングに費やされた時間がわかります。結果を平均すると、次の値が得られます。

  • テンプレート 1 (HTML ヘルパーあり): 405.8 ミリ秒
  • テンプレート 2 (プレーン HTML): 82.1 ミリ秒

したがって、違いは323.7 msであり、5 倍の違いです。ただし、10000 回の反復を使用してテストを行いましたが、これはおそらくテンプレートの既定の動作ではありません。テンプレートを 10 回などのより適切なデフォルトに変更すると、次の結果が得られます。

  • テンプレート 1 (HTML ヘルパーを使用): 3.7 ミリ秒
  • テンプレート 2 (プレーン HTML): 0.5 ミリ秒

今でも多少の違い ( 3.2 ms ) が見られますが、私の謙虚な意見では、これは無視できるものです。この時点で、私はパフォーマンスをまったく見ていませんが、あなたが好むスタイルだけを見ていきます. HTML を完全に制御したい場合は、プレーンな HTML バージョンを使用してください。HTML ヘルパーが提供するすべての追加機能 (注釈を jQuery 検証属性に自動的に変換するなど) が必要な場合は、そのメソッドを使用してください。ほとんどの場合、2 つの方法の違いは小さいため、大きな影響はありません。

于 2013-05-30T06:57:42.863 に答える