2013-04-15 19 views
5

Sto utilizzando MVC 4 e il Razor View Engine.Html.ActionLink molto lento

Ho una chiamata che viene chiamata in un ciclo foreach con ~ 200 elementi e questa operazione richiede circa 550 ms. Se sostituisco ActionLink con una semplice stringa ci vogliono solo ~ 50ms -> l'Html.ActionLink ha bisogno di ~ 500ms per 200 iterazioni!

C'è un modo per velocizzare questo?

ho 5 di questi nel mio ciclo in modo la mia pagina ha bisogno> 3s per rendere ...
uscita di costruzione e nessun attributo di debug nel web.config non aiuta.

+0

ho avuto problemi con Html.RenderPartial che era molto lento. appena ho compilato in versione e in esecuzione su IIS, i era molto veloce –

+3

Sei sicuro di chiamare solo 'Html.ActionLink (" Title "," Action ")' e non qualcosa di più complesso? Inoltre, hai registrato molti percorsi? Su quale macchina stai eseguendo il codice? –

+1

Provate a costruire un percorso specifico per questa azione e usando 'RouteLink' invece di' ActionLink'. C'è molto meno codice per costruire un collegamento con questo. E quando dico ** molto meno codice ** sto parlando del codice scritto da Microsoft. –

risposta

4

Ho unito alcuni dei suggerimenti dei commenti per ottenere una riduzione da ~ 3 a ~ 250 ms per il rendering della pagina completa. I maggiori cambiamenti dove:

  • cache le query DB dal mio percorso personalizzato (- risparmio> 2/3 ora per chiamata)
  • "Pregenerate" i collegamenti e sostituire solo parti di esso:
    ho fatto un @{ var link = Html.ActionLink("_USER_", "Edit", new { id = "_ID_" }); } prima che il ciclo foreach e nel ciclo di qualcosa come @link.Replace("_ID_", user.UserId.ToString()) (non è possibile utilizzare String.Format, come Html.ActionLink() sfugge al {0}%7B0%7D
+1

pensato che potresti essere interessato a vedere questo (circa 9 minuti in) https://channel9.msdn.com/Shows/Azure-Friday/Profiling-Live-Azure-Web-Apps-with-Application-Insights –