5

Mini-Profilerを新しいMVC4サイトにインストールしましたが、Find: DisplayTemplatesStringやDateTimeなどの特定のサイトで大きな待機時間が発生していることに気付きました。以下に例を示します。別の質問で、SamSaffronは検索ステップについてこれを言いました

その後の実行では、非常に高速です(本当に悪いことが起こっていない限り)

ただし、ページが読み込まれるたびに次のことが発生します。

http://localhost:80/SLS.Site/s/hogwarts/lunch...     2.6    +0.0
  Check School Permissions                           2.4    +2.0     1 sql   0.9
  Controller: SchoolAdmin.LunchGroupsController...   4.0    +4.5
  Find: Index                                        0.4    +8.6
  Render : Index                                    70.0    +9.1     2 sql   13.0
   Controller: SchoolAdmin.LunchGroupsController...  2.6    +12.3
   Find: BuildingTree                                0.4    +14.9
   Render partial: BuildingTree                      4.4    +15.4    1 sql   3.2
   Controller: SchoolAdmin.LunchGroupsController...  3.3    +20.2
   Find: Teachers                                    0.6    +23.6
   Render partial: Teachers                          4.3    +24.3    1 sql   2.4
   Find: DisplayTemplates/String                   409.3    +31.9
   Render partial: _UserContext                      0.0    +441.3
   Find: _LoginPartial                               1.2    +441.4
   Render partial: _LoginPartial                     0.2    +442.6
                                                                     3.9 % in sql

何かご意見は?

編集

4つの領域を設定したので、一致するものを探してすべてのディレクトリをトラバースしていると考えたので、2つの領域を削除して、同じ動作をしました。

4

2 に答える 2

3

私はまったく同じ問題を抱えていました...周りを検索した後、私が使用していたことがわかりました:

@DisplayFor(x => x.StringProperty);

それについて考え、自分でいくつかのテンプレートを作成して、すべての DisplayFor/EditorFor メソッドがどのように機能するかを調べた後、それは意味がありませんでした。

(DisplayFor/EditorFor の仕組みについて少し説明します)

DisplayFor/Editor for を使用する場合、MVC はtypeof オブジェクトを取得しViews/ControllerName/DisplayTemplates、そのタイプと同じ名前のビューをディレクトリで検索します。この場合は、 を検索しViews/ControllerName/DisplayTemplates/String.cshtmlます。存在しないため、Shared/DisplayTemplatesビューディレクトリでも同じことを行いますが、存在しません。

(この次のビットは憶測です)

関連する Display/Editor テンプレートが見つからないため、フェイルオーバーとしてオブジェクトに対して ToString() を実行すると思います。

とにかく String 型のみを表示しているので、 を使用せずに を使用することは理にかなっていますDisplayFor(x => StringProperty)@Model.StringPropertyこれにより、MVC は を検索せず、DisplayTemplateとにかく実行する文字列としてレンダリングするだけです。

于 2012-09-25T13:14:38.107 に答える
2

バンドルの周りにプロファイリング ブロックを配置すると、<head>実際に時間が費やされている場所を確認できました。当初、ミニプロファイラーは私を誤解させていました: 時間が 費やされたのではなくDisplayTemplates/String、他の場所で!

私の場合、遅延は MVC4 RC のスクリプト バンドルで発生していました。

バンドルを削除しましたが、すべて問題ありません。

以下の関連する問題を参照してください。

MVC4 RC スクリプトのバンドルが非常に遅い

于 2012-08-02T15:36:43.320 に答える