2009-07-29 18 views
1

Ich bin ziemlich neu in .NET-Entwicklung im Allgemeinen. Ich würde gerne etwas Instrumentierung in meiner Webanwendung machen, um die Performance zu optimieren, insbesondere in Bezug auf das Caching. Ich habe eine Menge benutzerdefinierter dynamisch generierter Benutzersteuerelemente geschrieben, die ich gerne auf verschiedene Arten zwischenspeichern möchte - möglicherweise durch Deklaration von ASPX-Seiten oder programmgesteuert.Code-Instrumentierung in einer ASP.NET-Webanwendung

Ich habe auch eine Menge von Oracle-Abfragen, die voneinander abhängen und ich würde gerne Caching-Ergebnisse von denen schauen, um zu sehen, was die besten Leistungssteigerungen bieten wird.

Was wäre der beste Weg, dies zu tun? Irgendwie denke ich nicht mit einer Stoppuhr zu sehen, wie lange IE die Seite lädt, ist die beste Idee. Ich habe keine Ahnung, ob mein Caching neben der wahrgenommenen Verzögerung getroffen oder verpasst wird. Verfügt VS2008 über integrierte Tools zur Unterstützung?

Antwort

2

Ein Projekt, an dem ich kürzlich gearbeitet habe, musste die Timings unserer SQL-Abfragen überprüfen und sie im Debug-Modus an den Debug-Listener ausgeben. Auf diese Weise konnten wir das Timing der SQL-Abfragen und deren Ausführungszeit beurteilen sowie unseren Website-Code debuggen.

Ich tat dies, indem wir für die verwendeten 3 Arten von SQL-Methoden SQL-Abfragen in eine Wrappermethode zentralisieren aus:

  • ExecuteQuery
  • ExecuteNonQuery
  • ExecuteScalar

Sie verwendet haben die Stoppuhr-Klasse, aber auch Code zum Umwandeln der Abfrage in eine SQL-Anweisung, ähnlich der in SQL Server Profiler.

Jede Methode war ähnlich der folgenden:

protected static object ExecuteScalar(SqlCommand comm, SqlParameter[] sqlParameters) 
{ 
    Stopwatch st = new Stopwatch(); 
    bool errorDetected = false; 

    try 
    { 
     comm.Parameters.Add(sqlParameters); 

     using(comm) 
     { 
       st.Start(); 
       object returnValue = comm.ExecuteScalar(); 
       st.Stop(); 
       return returnValue; 
     } 
    } 
    catch(Exception) 
    { 
     errorDetected = true; 
     st.Stop(); 
     throw; 
    } 
    finally 
    { 
     string output = GetSqlStringForParameters(sqlParameters,st.Elapsed,QueryType.Scalar); 

     if(errorDetected) 
     { 
       Debug.WriteLine("/*SQL (Errored)*/" + output,"DataAccess.SqlAdapter.ExecuteScalar"); 
     } 
     else 
     { 
       Debug.WriteLine("/*SQL*/" + output,"DataAccess.SqlAdapter.ExecuteScalar"); 
     } 
    } 
} 

Dies würde dann ausgegeben unsere SQL-Anweisungen in DebugView.exe wie folgt aus:

/*SQL*/ exec spsGetOrder @OrderNumber='234567' -- Rows returned = 1 ; 1 params |--> completed NonQuery in 0.0016144 seconds. 

Das Schöne daran ist, dass, obwohl, ja, es ist ein Engpass für diese Anweisungen, können wir die Abfrage direkt in SQL-Profiler einfügen und die Ausgabe der Abfrage abrufen. Wenn Sie über ein Tool zum Anzeigen der Protokolldateien verfügen, können Sie mithilfe von regulären Ausdrücken überwachen, wo die benötigte Zeit in einem bestimmten Bereich liegt.

Also, wenn Sie nach Abfragen über 0 suchen wollen.5 Sekunden, können Sie nach dem Begriff suchen:

"in 0. [5-9] \ d +" < - Alles größer als 0,5 Sekunden oder "in [1-9] \ d +" < - - Alles größer als 1 Sekunde

Dies hat uns geholfen, unsere Bemühungen immens zu konzentrieren. Es hilft uns auch bei der Identifizierung, ob ein Problem datenbankbezogen oder, wie oben beschrieben, ein ASP.NET-Problem ist.

Schließlich gibt es ein Tool namens Fiddler, das Ihnen auch bei der Diagnose von Seiten helfen kann, wenn diese auf Ihren Computer gelangen. Dies gibt Ihnen Informationen wie Dateigröße, Verweise auf Bilder/CSS, Download-Zeiten. Dies ist auch sehr nützlich beim Diagnostizieren von ViewState-Größenproblemen.

Ich hoffe, das hilft

1

Die Art, wie ich mich dem annähere, ist die Aktivierung der ASP.NET-Ablaufverfolgung. Es gibt eine ziemlich gute Anleitung zum Aktivieren von this here. Es ist ziemlich detailliert und das Beste ist, es ist kostenlos.

Eine Sache, auf die man sich konzentrieren sollte, ist die Größe der Seite (insbesondere der Ansichtszustand), die ein wichtiger Teil davon ist, wie lange die Seite zum Herunterladen braucht, sobald der Code ausgeführt wurde. Der andere ist, wie schnell bestimmte Teile des Codes rendern, was erreicht werden kann, indem vor und nach dem Code, der gerade getestet wird, Anrufe an Trace.Write getätigt werden.

Der Perf-Test-Teil der Verwendung von ASP.NET-Ablaufverfolgung ist wirklich nur ein Leitfaden, wie es nicht leicht wiederholbar ist, aber ein guter trotzdem. Wenn Sie es erweitern möchten, gibt es Tools in Visual Studio 2008 Team System, die möglicherweise besser sind (obwohl ich diese nicht verwendet habe). Es gibt auch JetBrains dotTrace und ANTS Profiler.

0

AppDynamics ist eine sehr gute Anwendungsleistung überwachen, dass Ihre .NET-Anwendungen ohne Konfiguration Instrumentation kann. Ich denke, dass Wille Ihr Problem mit diesem Werkzeug säen könnte. http://www.appdynamics.com/

0

Ich hatte sehr gute Erfahrungen mit New Relic. Sehr einfache Installation, extrem übersichtliches Dashboard auf ihrer Website, und wenn Sie zufällig auf Rackspace oder Amazon Clouds hosten, bieten sie normalerweise kostenlose Upgrades für Pro-Accounts an. Schaut sie euch an!