2013-04-15 10 views
5

Używam MVC 4 i maszynki Razor View Engine.Html.ActionLink bardzo wolno

Mam wywołanie Html.ActionLink("Title", "Action"), które jest wywoływane w pętli foreach z ~ 200 elementów i to trwa około 550ms, aby zakończyć. Jeśli zastąpię ActionLink prostym łańcuchem, to zajmie to ~ 50ms -> Html.ActionLink potrzebuje ~ 500ms na 200 iteracji!

Czy istnieje sposób, aby to przyspieszyć?

mam 5 z nich w moim pętli więc moja strona musi> 3s do renderowania ...
kompilacji Release a nie atrybut debug w pliku web.config nie pomaga.

+0

miałem kłopoty z Html.RenderPartial który był bardzo powolny. jak tylko skompilowany w wersji i uruchomiony na IIS, i t był bardzo szybki. –

+3

Czy na pewno dzwonisz tylko do 'Html.ActionLink (" Title "," Action ")' a nie do czegoś bardziej złożonego? Czy masz zarejestrowanych wiele tras? Na jakiej maszynie uruchamiasz kod? –

+1

Spróbuj zbudować określoną trasę dla tej akcji i używając 'RouteLink' zamiast' ActionLink'. Jest o wiele mniej kodu, aby utworzyć link z tym. A kiedy mówię ** dużo mniej kodu ** mówię o kodzie napisanym przez Microsoft. –

Odpowiedz

4

Połączyłem kilka wskazówek z komentarzy, aby uzyskać zmniejszenie z ~ 3s do ~ 250ms dla renderowania całej strony. Największe zmiany gdzie:

  • Cache kwerend DB z mojego niestandardowego trasie (- ratowniczy> 2/3 czas na rozmowy)
  • „Pregenerate” linki i tylko wymienić części z nich:
    zrobiłem @{ var link = Html.ActionLink("_USER_", "Edit", new { id = "_ID_" }); } przed pętli foreach i pętli w coś podobnego @link.Replace("_ID_", user.UserId.ToString()) (nie można użyć String.Format, ponieważ Html.ActionLink() ucieka {0} do %7B0%7D
+1

pomyślałem, że może Cię to zainteresować (około 9 minut) https://channel9.msdn.com/Shows/Azure-Friday/Profiling-Live-Azure-Web-Apps-with-Application-Insights –

Powiązane problemy