Question

J'ai une vue asp.net / page (dynamique) qui est constituée de Html.RenderPartials imbriquées. La vue est envoyé un viewmodel approprié pour rendre.

Firebug dit la réponse GET pour le HTML est 9.89 secondes pour 9.5KB. Pour comparer la FAQ (html statique) du même site est de 1,3 secondes pour 17K.

Au début, je pensais que ce fut la fin arrière Entity SQL ralentir les choses en raison de la complexité du viewmodel, mais il semble construire le viewmodel en moins de 1 sec selon mes journaux.

Toutes les idées pourquoi la vue MVC prend tant de temps pour rendre s'il vous plaît et comment je peux accélérer ce? J'envisage chargement partiel via ajax.

(BTW I Gzip et l'utilisation de CDN etc - j'ai yslowed tout le site à la mort)

Modifier

minuteries ajoutés (Chronomètre) à OnActionExecuting / OnActionExecuted et OnResultExecuting / OnResultExecuted.

09/12/2010 18:39:20: Contrôleur: Profil Action: Indice Temps écoulé: 680,6431 - Action

09/12/2010 18:39:29: Contrôleur: Profil Action: Indice Temps écoulé: 9202,063 - Résultat

9 secondes pour que le cadre pour rendre la vue.

Était-ce utile?

La solution

Problème résolu

Tout d'abord merci à vous tous pour vos suggestions. Je suivais encore et encore chaque suggestion jusqu'à ce que je trouve la question. C'est ce qui était faux, et peut-être que quelqu'un pourrait clarifier pour les autres.

VS2010 Performance Assistant a été dit que chaque objet étant transmis aux PartialViews prenait d'énormes temps CPU et je présume qu'il le partiel que j'ai lu, ils peuvent avoir des problèmes.

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'objet ProfileComment et amis (plus d'autres) font partie d'un ViewModel que je produis et passer à la page. Maintenant, la machine virtuelle est générée par le Entity Framework en moins de 0,3 secondes Je supposais tout allait bien avec la machine virtuelle.

Le retard énorme est venu quand je voulais la vue de traiter. Le modèle de la « boucle » a été signalé, et qu'il était donc FirstOrDefault par l'assistant Performace.

Hmm étrange, le modèle est construit rapidement, mais pas traité rapidement. Solution:

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

Je pense que la question extrayait l'objet de la machine virtuelle à envoyer au partiel car il manquait aussi de maintenir la gestion de l'entité pour les relations.

Plus d'infos sur Aia recherche

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

S'il vous plaît ne hésitez pas à développer plus en détail. BTW l'augmentation de la performance était énorme

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top