Frage

Ich bin mit redgate Performance Profiler zu testen mein asp.net Mvc 2 Anwendung. Eines der Dinge, die ich herausfand, war der XMLSerializer wurde so mit Bezug zu viel von der CPU-Zeit unter dieser Beitrag . Habe ich es, wo es verwendet XmlSerializerCache jetzt.

Jetzt ist das XmlSerializer Problem nicht mehr da und ich bin Profilieren der Anwendung von 80 Benutzer simulieren die gleichzeitig mit Jmeter die Website. So, jetzt die Top-Methoden, die Zeit in Anspruch nehmen werden eine FirstOrDefault() auf einige Daten zu tun Ich bin ziehen Ich gebe Beispiel-

var values=(from c in DataContext.Table1
           join s in DataContext.Table2 on new { c.Id, c.date } 
            equals new { s.Id, s.date } into list
                          where c.Id== Id && c.date == date
                          from s in list.DefaultIfEmpty()
                          select new DayDTO()
                          {
                              Points = c.points,
                              Points1 = c.points1,
                              Points2 = c.points2,
                              Points3 = c.points3,
                              Points4 = c.points4
                          }).FirstOrDefault();

Kann mir jemand vorschlagen, was ich diese verbessern können? Die aktuellen Zeiten sind 25 Sekunden und 16 Sekunden für die Top-2-Methoden .. Ist es nur, weil ich 80 Benutzer gleichzeitig bin simuliert und es gibt einige Probleme auf Datenbank (SQL Server 2005) Seite wie die Tabelle zu groß ist und die Indizierung etc ... und ich werde in diesen Blick, aber zur Zeit versuche ich, um Probleme zu erkennen Sie also Fragen auf C # Seite mit dem Code zu sehen ..

Ich würde jede Hilfe dankbar Dank!

War es hilfreich?

Lösung

Dies setzt voraus, dass die Top-Zeit die „inklusive Zeit“, nicht die „exklusive Zeit“.

Inclusive Zeit bedeutet, dass es keinen Code durch das Verfahren in diesem Fall die FirstOrDefault die Datenbank-Aufruf wird ausgeführt, genannt enthält. Datenbank Anrufe sind teuer im Zusammenhang mit der Latenz, aber der CPU-Thread blockiert ist und nicht die CPU mit, während für die Datenbank Anklopf.

Zuerst sollte man sich fragen, ob dies ein Problem ist, ist es nicht wesentlich beeinflussen Durchsatz (den Datenbankserver unter der Annahme, die Last bewältigen), aber Latenz von Anrufen.

Wenn dies ein Problem, das Sie die aktuelle SQL-Abfrage beschleunigen müssen. Sie sollten SQL Profiler starten, die eigentliche Frage fangen, es dann in SQL Management Studio. Schauen Sie sich den Ausführungsplan, um zu sehen, ob die Abfrage langsamer als erwartet und versucht, herauszufinden, warum. Wenn es zu langsam ist, könnte Sie Ihre Indizierung überprüfen zu beginnen.

Andere Tipps

FirstOrDefault wird wahrscheinlich als der Schuldige ist einfach genannt, weil es die Methode ist, die Aufzählung in Ihrem Fall zwingt. Wenn Sie in einem .ToList werfen (), bevor er, dann würden Sie die Last Shift zu .ToList finden ().

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