Frage

Ich habe eine asp.net Ansicht / Seite (dynamisch), die aus verschachtelten Html.RenderPartials gebaut wird. Die Ansicht ist ein entsprechendes Ansichtsmodell zu machen gesendet.

Firebug sagt die GET-Antwort für die HTML 9.89 Sekunden für 9,5 kb ist. die FAQ-Seite (statische HTML) von der gleichen Stelle beträgt 1,3 Sekunden für 17K zu vergleichen.

Zuerst dachte ich, es die SQL Entity zurück Ende ist, die Dinge nach unten aufgrund der Komplexität des Ansichtsmodelles verlangsamt, aber es scheint das Ansichtsmodell in weniger als 1 Sekunde nach meinem Logs zu konstruieren.

Irgendwelche Ideen, warum die MVC-Ansicht wird so lange dauert bitte zu machen, und wie kann ich diese beschleunigen? Ich erwäge Teilbelastung über Ajax.

(btw ich gzip und verwenden CDN etc - ich habe die ganze Seite zu Tode yslowed)

Edit:

hinzugefügt Timer (Stoppuhr) zu OnActionExecuting / OnActionExecuted und OnResultExecuting / OnResultExecuted.

09/12/2010 18.39.20: Controller: Profil Aktion: Index Abgelaufene Zeit: 680,6431 - Aktion

09/12/2010 18.39.29: Controller: Profil Aktion: Index Abgelaufene Zeit: 9202,063 - Ergebnis

9 Sekunden für den Rahmen um die Ansicht zu machen.

War es hilfreich?

Lösung

Problem gelöst

Zum einen Dank an euch alle für Ihre Anregungen. Ich folgte jeden Vorschlag immer wieder, bis ich das Problem gefunden. Dies ist, was falsch war, und vielleicht jemand für andere klären konnte.

VS2010 Performance-Assistent sagt, dass jedes Objekt auf die PartialViews geführt wird war riesig CPU Zeit in Anspruch nimmt, und ich vermute sie die teilweise sein, wie wir lesen sie Probleme haben.

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);
}

Die ProfileComment and Friends Objekt (plus andere) sind Teil eines Ansichtsmodell I erzeugen und auf die Seite übergeben. Nun wird die VM über das Entity Framework erzeugt in weniger als 0,3 Sekunden Also ich war alles in Ordnung mit dem VM vermutet.

Die große Verzögerung kam, als ich die Ansicht, sie verarbeiten wollte. Das Modell in der ‚for-Schleife‘ wurde markiert, und so war FirstOrDefault vom Performace-Assistenten.

Hmm seltsam ist das Modell schnell aufgebaut, aber nicht schnell verarbeitet. Lösung:

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

Ich denke, das Problem das Objekts aus der VM wurde Extrahieren des Teil zu senden, wie es auch für die Beziehungen Entity-Management erhalten mangelt.

Weitere Informationen unter Aia Forschung

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

Bitte fühlen Sie sich frei auf diese im Detail zu erweitern. Btw die Leistungssteigerung war große

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top