2013-04-15 20 views
5

Ich benutze MVC 4 und die Razor View Engine.Html.ActionLink sehr langsam

Ich habe eine Html.ActionLink("Title", "Action") Aufruf, der in einer foreach-Schleife mit ~ 200 Elemente aufgerufen wird und das dauert ca. 550ms zu vervollständigen. Wenn ich den ActionLink durch eine einfache Zeichenfolge ersetze dauert es nur ~ 50ms -> der Html.ActionLink benötigt ~ 500ms für 200 Iterationen!

Gibt es eine Möglichkeit, dies zu beschleunigen?

Ich habe 5 davon in meiner Schleife so meine Seite muss> 3s machen ...
Releasebuild und kein Debug-Attribut in der web.config helfen nicht.

+0

ich Probleme mit Html.RenderPartial hatte, die sehr langsam war. Sobald ich in Version kompiliert und auf IIS ausgeführt, ich Es war sehr schnell. –

+3

Sind Sie sicher, dass Sie nur 'Html.ActionLink (" Titel "," Aktion ") aufrufen und nicht etwas Komplexeres? Haben Sie auch viele Routen registriert? Auf welcher Maschine läuft der Code? –

+1

Versuchen Sie, eine bestimmte Route für diese Aktion zu erstellen, und verwenden Sie "RouteLink" anstelle von "ActionLink". Es gibt viel weniger Code, um eine Verbindung damit aufzubauen. Und wenn ich sage, viel weniger Code ** Ich spreche über den Code von Microsoft geschrieben. –

Antwort

4

Ich habe ein paar der Tipps aus den Kommentaren kombiniert, um eine Reduzierung von ~ 3s auf ~ 250ms für das Rendern der kompletten Seite zu erreichen. Die größten Veränderungen Wo:

  • Cache die DB-Abfragen aus meiner benutzerdefinierten Route (-> 2/3 Mal pro Anruf zu speichern)
  • „vorab generiert wird“ die Links und nur Teile davon ersetzen:
    Ich habe ein @{ var link = Html.ActionLink("_USER_", "Edit", new { id = "_ID_" }); } vor der foreach-Schleife und in der Schleife so etwas wie @link.Replace("_ID_", user.UserId.ToString()) (Sie können nicht String.Format verwenden, da die Html.ActionLink() entkommt {0}-%7B0%7D
+1

dachte, Sie könnten interessiert sein, dies zu sehen (ca. 9 Minuten in) https://channel9.msdn.com/Shows/Azure-Friday/Profiling-Live-Azure-Web-Apps-with-Application-Insights –