2012-08-01 5 views
5

Ich habe Mini-Profiler auf einer neuen MVC4-Site installiert und bemerken eine große Wartezeit für bestimmte Find: DisplayTemplates einschließlich String und DateTime. Unten ist ein Beispiel. In einer anderen Frage, sagte Sam Saffron diese über den Fund SchrittSuchen: DisplayTemplates Geschwindigkeit

Bei nachfolgenden Läufen es blitzschnell ist (es sei denn, Sie etwas wirklich Schlimmes passiert haben)

Aber passiert folgendes auf jeder Seite zu laden:

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 

Irgendwelche Gedanken?

bearbeiten

hatte ich 4 Bereiche Setup, so dass ich dachte, es alle Verzeichnisse wurde durchqueren für ein Spiel suchen, so dass ich entfernt 2 der Bereiche und haben das gleiche Verhalten.

+0

Ich habe gerade einen Test nach einem ähnlichen Problem gemacht.Es scheint, dass eine erhebliche Menge an Arbeit bis zum ersten Aufruf von DisplayFor verschoben wird, so dass die Zeit aufgebläht wird –

Antwort

2

Sobald ich einen Profiling Block um die Bündel in der <head> legte, konnte ich sehen, wo die Zeit wirklich verbracht wurde. Mini-Profiler war irreführend mich, ursprünglich: Die Zeit war nicht in DisplayTemplates/String verbracht aber anderswo!

In meinem Fall war die Verzögerung in MVC4 RC Skriptbündelung.

Ich entfernte die Bündel und alles ist gut.

Siehe verwandtes Thema unter:

MVC4 RC script bundling very slow

+1

Das wichtige Ding hier ist, dass das Problem auf etwas anderes als das DisplayFor definitiv bezogen werden kann. Das Leistungsproblem, das ich suchte, war ein AD-Lookup für jedes Element in unserem Menü. Die Schlüssellektion aus dieser Antwort ist, Ihre Suche zu erweitern, sonst könnte die Standardkategorisierung von MiniProfiler Sie in die Irre führen. –

3

Ich hatte genau das gleiche Problem ... Nach einiger Suche fand ich um Ich war mit:

@DisplayFor(x => x.StringProperty);

Nachdem darüber nachzudenken und herauszufinden, wie alle DisplayFor/EditorFor-Methoden aus der Erstellung einiger Vorlagen funktionieren, ergab keinen Sinn.

(Ein bisschen Erklärung, wie DisplayFor/EditorFor arbeitet)

Bei der Verwendung von DisplayFor/Editor für MVC die type des Objekts erhält und durchsucht dann die Views/ControllerName/DisplayTemplates Verzeichnis für eine Ansicht mit dem gleichen Namen wie die Geben Sie in diesem Fall ein. Da es nicht existiert, macht es auch dasselbe in dem Shared/DisplayTemplates Sichtenverzeichnis, wieder wird es nicht existieren.

(Das nächste Bit ist Spekulation)

Ich würde davon ausgehen, dass, da es nicht die entsprechende Anzeige/Editor-Vorlage finden kann, führt es dann eine ToString() auf dem Objekt, wie ein Failover.

Wie Sie nur die Anzeige geben Sie einen String wie auch immer, würde es Sinn machen, nicht die DisplayFor(x => StringProperty) zu verwenden und @Model.StringProperty nur verwenden, die nicht MVC für ein DisplayTemplate suchen verursachen würde, und es nur als String zu machen, was es los ist trotzdem tun.

+3

Es ist eine Schande, dass dies nicht die akzeptierte Antwort ist, weil es ein guter Rat ist. Das 'Find: DisplayTemplates'-Zeug ist wirklich langsam und wenn Sie nicht ein komplexes Template-Rendering durchführen, verwenden Sie einfach die Werte aus dem Modell. Vermeiden Sie 'Html.DisplayFor' wie die Pest. – Jez

+2

Cheers - Gute Fähigkeiten auf 'Html.DisplayFor ', Ich habe ein paar Geschwindigkeitsprobleme auch dort gesehen! Wie Sie sagen, vermeiden Sie es, wenn Sie nicht Ihre eigenen Vorlagen verwenden! –