Freigeben über


Vorgehensweise: Programmgesteuertes Lesen überwachter Werte

Letzte Änderung: Donnerstag, 3. März 2011

Gilt für: SharePoint Foundation 2010

In diesem Thema wird erläutert, wie die Werte von Windows Server 2008-Leistungsindikatoren, die vom Microsoft SharePoint Foundation-System für die Leistungsüberwachung und Anforderungssteuerung beobachtet werden, von Ihrem Code gelesen werden können.

Wichtiger HinweisWichtig

Im ausgeführten Beispiel in diesem Thema wird eine Konsolenanwendung verwendet. Ungeachtet des Projekttyps ist es wichtig, dass Sie die richtige .NET Framework-Zielversion und die richtige Ziel-CPU festlegen. Das Ziel des Projekts muss Microsoft .NET Framework 3.5 sein (nicht Microsoft .NET Framework 4). Die Ziel-CPU muss Any CPU oder x64 entsprechen. Weitere Informationen zur Auswahl finden Sie unter Gewusst wie: Festlegen des richtigen Zielframeworks und der CPU. Die Ziel-CPU ist normalerweise standardmäßig auf x86 festgelegt. Zum Ändern dieser Einstellung klicken Sie mit der rechten Maustaste auf den Projektnamen im Projektmappen-Explorer und wählen Eigenschaften aus. Sie können die CPU auf der Registerkarte Erstellen mithilfe der Dropdownliste Zielplattform ändern.

Programmgesteuertes Lesen eines Leistungsindikators

Im folgenden Verfahren wird die Verwendung der SharePoint Foundation-APIs für die Leistungsüberwachung zum Lesen eines Leistungsindikators gezeigt. Es sind zahlreiche Feinheiten des zugrunde liegenden Systems der Leistungsindikatoren des Betriebssystems zu beachten. Von einigen Indikatoren wird z. B. erst dann ein genauer Wert angegeben, wenn sie ein zweites Mal vom entsprechenden Code aufgerufen werden. Ihnen sollten die folgenden Themen und die spezifischen Indikatoren vertraut sein, die von Ihrem Code gelesen werden. Zahlreiche dieser Themen handeln von verwalteten oder nicht verwalteten APIs, die nicht direkt relevant sind. Ihr Verständnis für das zugrunde liegende System wird dadurch jedoch verbessert.

Zudem wird es empfohlen, dass Sie für jeden Indikator, dessen Daten von Ihrem Code gelesen werden, nach Einträgen in der Knowledge Base, in Blogs und Foren suchen.

HinweisHinweis

.NET Framework enthält APIs zum Lesen des Werts von Windows Server 2008-Leistungsindikatoren, in diesem Thema wird jedoch vorausgesetzt, dass Sie sicherstellen möchten, dass Sie nur die für die Überwachung im Microsoft SharePoint Foundation-System für die Leistungsüberwachung und Anforderungssteuerung registrierten Indikatoren verwenden.

So lesen Sie einen Leistungsindikator

  1. Erstellen Sie in Microsoft Visual Studio ein Konsolenanwendungsprojekt, und legen Sie die .NET Framework-Zielversion und die CPU-Zielplattform fest.

  2. Fügen Sie dem Konsolenanwendungsprojekt einen Verweis auf Microsoft.SharePoint.dll hinzu. Sie befindet sich in der %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI.

  3. Öffnen Sie die Datei program.cs, und legen Sie einen entsprechenden Namespace und einen Klassennamen fest. Fügen Sie dann using-Anweisungen für System.Threading, Microsoft.SharePoint, Microsoft.SharePoint.Administration und Microsoft.SharePoint.Utilities hinzu. Der Code sollte jetzt ungefähr so aussehen.

    using System;
    using System.Threading;
    using Microsoft.SharePoint; 
    using Microsoft.SharePoint.Administration;
    using Microsoft.SharePoint.Utilities;
    
    namespace Contoso.SharePoint.Utilities
    {
        class PerformanceCounterReader
        {
            static void Main(string[] args)
            {
    
            }
    // end Main
        }
    }
    
  4. Rufen Sie in der Main-Methode einen Verweis auf die Webanwendung auf, deren Leistungsindikatoren gelesen werden sollen. Im folgenden Code ist dies dargestellt.

    static void Main(string[] args)
    {
        Uri webApplicationUri = new Uri("Http://localhost/");
        SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri);
    
    }
    

    Der gesamte übrige Code in diesem Thema wird der Main-Methode hinzugefügt.

  5. Rufen Sie einen Verweis auf die Einschränkungseinstellungen der Webanwendung und auf die Auflistung der registrierten Indikatoren ab.

    SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication);
    SPSystemPerformanceMonitorCollection monitors = throttleSettings.GenerateMonitors();
    
  6. Rufen Sie einen Verweis auf den Indikator ab, dessen Wert gelesen werden soll. In einigen Fällen ist Ihnen zur Entwurfszeit die Position des Indikators in der Auflistung bekannt, und Sie können einen Indexer für den Verweis auf den Indikator verwenden. Falls es sich z. B. um den letzten Indikator handelt, könnten Sie diese Zeile verwenden: SPSystemPerformanceCounterMonitor counterMonitor = (SPSystemPerformanceCounterMonitor)monitors[monitors.Count - 1];. (Beachten Sie, dass Sie das Indikatorobjekt in den spezifischen nicht-abstrakten Indikatortyp umwandeln müssen, zu dem es gehört.) In anderen Szenarios muss der Code möglicherweise mehrfach die Auflistung durchlaufen, um nach einem Indikator mit einer bestimmten Gruppe von Category-, Counter- und Instance-Eigenschaftswerten zu suchen. Im folgenden Beispiel wird vom Code eine Schleife durch alle registrierten Indikatoren ausgeführt, die Value-Eigenschaft wird gelesen und die Namen und Werte werden zurückgegeben.

    foreach (SPSystemPerformanceMonitor monitor in monitors)
    {
        SPSystemPerformanceCounterMonitor counterMonitor = (SPSystemPerformanceCounterMonitor)monitor;
        Console.WriteLine(counterMonitor.Name);
    
        // Read and display the counter value. 
        double currentValue = Convert.ToDouble(counterMonitor.Value); 
        Console.WriteLine(currentValue.ToString());                  
    }
    
    Console.WriteLine("Press return to end application.");
    Console.Readline();
    
  7. Beachten Sie, dass für zahlreiche Leistungsindikatoren beim ersten Lesen des Indikators immer ein Standardwert zurückgegeben wird, da der Wert des Indikators eine Funktion aus zwei Rohdatenpunkten ist. Der Indikator muss nach einer gewissen Wartezeit ein zweites Mal gelesen werden, damit ein gültiger Wert zurückgegeben wird. Wenn z. B. der Indikator Prozessor\Prozessorzeit (%)\_Gesamt überwacht wird, benötigt der get-Accessor von Value mindestens eine Sekunde, um einen gültigen Wert nach dem ersten Lesen durch den aufrufenden Code zu generieren. Wenn Sie sicherstellen möchten, dass Ihr Code einen gültigen Wert abruft, verwenden Sie einen Aufruf von Sleep(Int32), um mindestens eine Sekunden zu warten und dann Value erneut zu lesen. Dies wird im folgenden Code gezeigt.

    foreach (SPSystemPerformanceMonitor monitor in monitors)
    {
        SPSystemPerformanceCounterMonitor counterMonitor = (SPSystemPerformanceCounterMonitor)monitor;
        Console.WriteLine(counterMonitor.Name);
    
        // Read the counter value, wait 1.5 seconds, and read again for a valid value.
        double currentValue = Convert.ToDouble(counterMonitor.Value); 
        Thread.Sleep(1500);
        currentValue = Convert.ToDouble(counterMonitor.Value);
    
        // Write the valid value to the screen.
        Console.WriteLine(currentValue.ToString());                  
    }
    
    Console.WriteLine("Press return to end application.");
    Console.Readline();
    
    TippTipp

    Sobald Sie einen gültigen Wert besitzen, verwenden Sie, wenn Sie denselben Wert erneut benötigen, die LastValue-Eigenschaft. Durch das erneute Lesen von Value wird der Wert des zugrunde liegenden Indikators erneut abgerufen, bei dem es sich in der Regel um einen anderen Wert handelt.

Siehe auch

Konzepte

Anforderungsdrosselung