Procédure : lire par programme les valeurs surveillées
Dernière modification : jeudi 3 mars 2011
S’applique à : SharePoint Foundation 2010
Cette rubrique explique comment votre code peut lire les valeurs des compteurs de performance Windows Server 2008 qui font l’objet d’une surveillance de la part du système d’analyse des performances et de limitation de requêtes Microsoft SharePoint Foundation.
Important
L’exemple exécuté dans cette rubrique utilise une application console. Quel que soit le type du projet, il est très important de définir l’infrastructure .NET Framework et l’unité centrale cible correctes. Le projet doit cibler Microsoft .NET Framework 3.5 (et non pas Microsoft .NET Framework 4). L’unité centrale cible doit être Tout processeur ou x64. Pour plus d’informations sur le choix, voir Procédure : définir le Framework et l’unité centrale cibles adéquats. Par défaut, l’unité centrale cible est généralement x86. Pour la changer, cliquez avec le bouton droit sur le nom du projet dans l’Explorateur de solutions et sélectionnez Propriétés. Vous pouvez changer l’unité centrale sur l’onglet Version en utilisant la liste déroulante Plateforme cible.
Lecture d’un compteur de performance par programme
La procédure suivante montre comment utiliser les API d’analyse des performances SharePoint Foundation pour lire un compteur de performance. Le système de compteurs de performance sous-jacent du système d’exploitation comporte de nombreuses subtilités. Certains compteurs, par exemple, ne donnent une valeur précise qu’après avoir été lus une deuxième fois par du code consommateur. Il est recommandé d’avoir assimilé les rubriques suivantes, ainsi que les compteurs spécifiques lus par votre code. De nombreuses de ces rubriques portent sur des API gérées ou non gérées qui ne sont pas spécifiquement pertinentes, mais qui vous permettent de mieux comprendre le système sous-jacent.
Compteurs de performance Windows (éventuellement en anglais) et les rubriques situées sous ce nœud.
Référence des compteurs de performance Windows Server 2003 (éventuellement en anglais)
Introduction à l’analyse des seuils de performance (éventuellement en anglais) et les rubriques situées sous ce nœud.
PerformanceCounter
Collecte des données de performances (éventuellement en anglais)
Affichage des données de performances (éventuellement en anglais)
Il est également recommandé de consulter les entrées de la Base de connaissances, des blogs et des forums relatives à chaque compteur dont les données sont lues par votre code.
Notes
L’infrastructure .NET Framework possède des API pour la lecture de la valeur des compteurs de performance Windows Server 2008, mais cette rubrique suppose que vous souhaitez absolument utiliser des compteurs qui ont été inscrits pour l’analyse auprès du système d’analyse des performances et de limitation de requêtes Microsoft SharePoint Foundation.
Pour lire un compteur de performance
Créez un projet d’application console dans Microsoft Visual Studio, puis définissez l’infrastructure .NET Framework et la plateforme d’unité centrale cibles.
Ajoutez une référence à Microsoft.SharePoint.dll au projet d’application console. Le fichier se trouve dans %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI.
Ouvrez le fichier program.cs, définissez un espace de noms et un nom de classe appropriés, puis ajoutez des instructions using pour System.Threading, Microsoft.SharePoint, Microsoft.SharePoint.Administration et Microsoft.SharePoint.Utilities. Votre code doit maintenant se présenter comme suit.
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 } }
Dans la méthode Main, obtenez une référence à l’application Web dont les analyseurs de performances doivent être lus. Le code suivant illustre cette procédure.
static void Main(string[] args) { Uri webApplicationUri = new Uri("Http://localhost/"); SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri); }
Tout le code restant dans cette rubrique est ajouté à la méthode Main.
Obtenez une référence aux paramètres de limitation de l’application Web et à la collection d’analyseurs inscrits.
SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication); SPSystemPerformanceMonitorCollection monitors = throttleSettings.GenerateMonitors();
Obtenez une référence à l’analyseur dont la valeur doit être lue. Dans certains cas, lors de la conception, vous connaissez la position de l’analyseur dans la collection et vous pouvez utiliser un indexeur pour y faire référence. S’il s’agit du dernier compteur, par exemple, vous pouvez utiliser la ligne SPSystemPerformanceCounterMonitor counterMonitor = (SPSystemPerformanceCounterMonitor)monitors[monitors.Count - 1];. (Notez que vous devez convertir l’objet analyseur dans le type d’analyseur non abstrait spécifique auquel il appartient.) Dans d’autres scénarios, votre code peut être amené à passer en revue la collection à la recherche d’un analyseur présentant un ensemble spécifique de valeurs de propriétés Category, Counter et Instance. Dans l’exemple suivant, le code passe en revue tous les analyseurs inscrits, lit la propriété Value et indique leurs noms et valeurs.
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();
Notez que, pour de nombreux types de compteurs de performance, une valeur par défaut est toujours indiquée lors de la première lecture du compteur, car la valeur du compteur est une fonction de deux points de données bruts. Vous devez lire le compteur une deuxième fois, avec une pause entre-temps, pour obtenir une valeur valide. Par exemple, si le compteur en cours d’analyse est Processeur\% temps processeur\_Total, l’accesseur get de Value a besoin au moins d’une seconde complète pour générer une valeur valide après sa première lecture par le code appelant. Pour que votre code obtienne une valeur valide, utilisez un appel de Sleep(Int32) pour patienter au moins une seconde, puis pour lire Value de nouveau. Le code suivant illustre cette procédure.
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();
Conseil
Lorsque vous avez une valeur valide, si vous avez de nouveau besoin de cette valeur, utilisez la propriété LastValue. Si la propriété Value est lue de nouveau, cela se traduit par une autre extraction de la valeur du compteur sous-jacent, qui correspond normalement à une autre valeur.