Domanda

Ho una vista asp.net / pagina (dinamica) che viene costruito di Html.RenderPartials nidificati. La visualizzazione viene inviato un viewmodel idoneo a rendere.

Firebug dice che la risposta GET per l'HTML è 9,89 secondi per 9.5KB. Per confrontare la pagina delle FAQ (statico html) dello stesso sito è di 1,3 secondi per 17K.

In un primo momento ho pensato che fosse il back-end di SQL Entity rallentando il tutto a causa della complessità del ViewModel ma sembra per costruire il ViewModel in meno di 1 sec secondo i miei registri.

Tutte le idee perché la vista MVC sta prendendo così tanto tempo per il rendering per favore e come posso accelerare questo? Sto pensando di carico parziale tramite la tecnologia AJAX.

(btw ho Gzip e l'uso di CDN, ecc - ho yslowed l'intero sito a morte)

Modifica

timer Aggiunto (cronometro) a OnActionExecuting / OnActionExecuted e OnResultExecuting / OnResultExecuted.

09/12/2010 18:39:20: Controllore: Profilo Azione: il tempo trascorso Indice: 680,6431 - Azione

09/12/2010 18:39:29: Controllore: Profilo Azione: il tempo trascorso Indice: 9202,063 - Risultato

9 secondi per il quadro di generare la vista.

È stato utile?

Soluzione

Problema risolto

In primo luogo, grazie a tutti voi per i vostri suggerimenti. Ho seguito ancora e ancora ogni suggerimento fino a quando ho trovato il problema. Questo è ciò che è stato sbagliato, e forse qualcuno potrebbe chiarire per gli altri.

VS2010 performance guidata stava dicendo che ogni oggetto che viene passato ai PartialViews stava prendendo enorme tempo di CPU e presume che sia parziale come ho letto che possono avere problemi.

foreach (ProfileComment item in Model)
{
    Html.RenderPartial("UserActivityComment", item);
}
...
Friends friend = Model.Friends.Where(e => e.ID == activity.ActionID).FirstOrDefault();
if (friend.FriendsProfile.UserName != Page.User.Identity.Name)
{
    Html.RenderPartial("UserActivityFriend.ascx", friend);
}

L'oggetto ProfileComment and Friends (più altri) fanno parte di un ViewModel ho generare e passare alla pagina. Ora la VM viene generato tramite l'Entity Framework in meno di 0,3 secondi Così ho presunto tutto andava bene con la VM.

L'enorme ritardo è venuto quando ho voluto la vista di elaborarlo. Il modello nel 'ciclo' è stato segnalato, e così è stato FirstOrDefault dal Performace guidata.

Hmm strano, il modello è costruito rapidamente, ma non elaborate rapidamente. Soluzione:

_entities.Friends.MergeOption = MergeOption.NoTracking;
_entities.ProfileComment.MergeOption = MergeOption.NoTracking;

Credo che il problema è stata l'estrazione l'oggetto dal VM da inviare al parziale è stato anche voler mantenere una gestione entità per le relazioni.

Maggiori informazioni all'indirizzo Aia ricerca

e blogs.microsoft.co.il/blogs/gilf/archive/2009/02/20/disabling-change-tracking-in-entity-framework.aspx

Non esitate a espandere su questo in modo più dettagliato. Btw l'incremento di prestazioni è stato enorme

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top