Entwickeln mit Hilfe des Developer Dashboards

Eines der wichtigsten Features für Entwickler im neuen SharePoint 2010 ist das
Developer Dashboard.
Wie man das Developer Dashboard aktiviert habe ich schon hier beschrieben.
Doch wie benutzt man das Feature um seinen Code zu analysieren?

Zeit stoppen

In der linken Spalte des Developer Dashboards findet man die Ablaufverfolgung des Requests.
Hier findet man eine Liste von ausgeführten Aktionen mit Angaben zur Dauer der Verarbeitung.
Um eigene Aktionen aufzunehmen benutzt man das Objekt SPMonitoredScope, das sich im Namespace Microsoft.SharePoint.Utilities befindet.
Jeglicher Code, der ausgeführt wird solange eine Instanz von SPMonitoredScope vorhanden ist wird protokolliert.
Deshalb sollte man SPMonitoredScope über usings steuern.

protected void myButton_Click(object sender, EventArgs e)
{
    using (SPMonitoredScope scopeButtonPushed = new SPMonitoredScope("Button action"))
    {
        // dummy sleep action
        Thread.Sleep(5000);
        l.Text = "Meine Daten: ";


        string myData = GenerateLabelData();
        l.Text += myData;
    }
}

Dieser Beispielcode nimmt auf, dass die Aktion „Button action“ 5 Sekunden gedauert hat und zeigt die Daten in der Ablaufverfolgung an.

Es besteht auch die Möglichkeit Aktionen zu verschachteln.
Somit kann man eine detaillierte Informationen zu seinem Code bekommen.

protected void myButton_Click(object sender, EventArgs e)
{
    using (SPMonitoredScope scopeButtonPushed = new SPMonitoredScope("Button action"))
    {
        // dummy sleep action
        Thread.Sleep(5000);
        l.Text = "Meine Daten: ";


        string myData = GenerateLabelData();
        l.Text += myData;
    }
}

private string GenerateLabelData()
{
    // z.B. lesen von daten aus einer datenbank
    using (SPMonitoredScope scopeGetData = new SPMonitoredScope("Get user information"))
    {
        // ... und noch ein dummy sleep
        Thread.Sleep(3000);
        return "Daniel Lindemann";
    }
}

In diesem Beispiel wird die Aktion „Get user information“ innerhalb der Aktion „Button action“ ausgeführt.
Dies erzeugt folgende Ausgabe im Developer Dashboard:

Informationen im Developer Dashboard

Informationen im Developer Dashboard

Wichtige Ereignisse protokollieren

Auf der rechten Seite des Developer Dashboards findet man die Spalte Assertionen und kritische Ereignisse bzw. Asserts and Critical Events in der englischen Version.
Wie der Name schon verrät können hier kritische Ereignisse Überprüft werden.
Man sollte diese Funktion benutzten um darauf hinzuweisen, dass etwas nicht wie gewünscht ausgeführt wurde. Dazu benutzt man die statische Methode AddDataToScope der Klasse SPCriticalTraceCounter die sich ebenfalls im Namespace Microsoft.SharePoint.Utilities befindet.
Als Beispiel ändere ich die Methode GenerateLabelData() sodass ein Eintrag zu den Ereignissen hinzugefügt wird:

private string GenerateLabelData()
{
    // z.B. lesen von daten aus einer datenbank
    using (SPMonitoredScope scopeGetData = new SPMonitoredScope("Get user information"))
    {
        // ... und noch ein dummy sleep
        Thread.Sleep(3000);
        SPCriticalTraceCounter.AddDataToScope(2501, "Database problem", 1, "Database query took long time");
        return "Daniel Lindemann";
    }
}

Als 3. Parameter erhält die Methode ein Flag, das beschreibt um welche Art von Meldung es sich handelt.
Folgende Meldungen sind möglich:

  • 1 = Critical
  • 4 = Exception
  • 6 = Assert
  • 8 = Warning
  • 10 = Unexpected
  • 15 = Monitorable

Diese Methode um den Ablauf des Codes zu verfolgen hat jedoch einen Nachteil. Es wird immer der komplette StackTrace mitgespeichert und somit kann die Antwort des Servers um einige kB anwachsen.
Darum sollte die Methode nicht für jedes Problem das auftreten kann aufgerufen werden.