Procedimiento para leer mediante programación valores supervisados
Última modificación: jueves, 03 de marzo de 2011
Hace referencia a: SharePoint Foundation 2010
En este tema, se explica cómo el código puede leer los valores de los contadores de rendimiento de Windows Server 2008 supervisador por el sistema de limitación de solicitudes y supervisión de rendimiento de Microsoft SharePoint Foundation.
Importante |
---|
En el ejemplo de este tema, se usa una aplicación de consola. Independientemente del tipo de proyecto, es importante establecer la CPU y el .NET Framework de destino correctos. El proyecto debe tener como destino Microsoft .NET Framework 3.5 (no Microsoft .NET Framework 4). La CPU de destino debe ser Any CPU o x64. Para obtener información sobre esta elección, vea Procedimiento para establecer el marco de destino y CPU correctos. De manera predeterminada, la CPU de destino es generalmente x86. Para cambiarla, haga clic con el botón secundario en el nombre del proyecto en el Explorador de soluciones y seleccione Propiedades. Puede cambiar la CPU en la ficha Compilación mediante la lista desplegable Destino de la plataforma. |
Lectura mediante programación de un contador de rendimiento
El siguiente procedimiento muestra cómo usar las API de supervisión de rendimiento de SharePoint Foundation para leer un contador de rendimiento. El sistema subyacente del contador de rendimiento del sistema operativo presenta muchas sutilezas. Algunos contadores, por ejemplo, no proporcionan un valor preciso hasta que el código de consumo los lee por segunda vez. Se recomienda familiarizarse con los siguientes temas y con los contadores específicos que el código está leyendo. Muchos de ellos tratan sobre API administradas o sin administrar que no son directamente relevantes, pero que mejorarán su comprensión del sistema subyacente.
Contadores de rendimiento de Windows y los temas en este nodo.
Referencia de los contadores de rendimiento de Windows Server 2003
Introducción a la supervisión de umbrales de rendimiento y los temas en este nodo.
PerformanceCounter
Se recomienda también buscar en la base de conocimientos, el blog y el foro de usuarios información sobre los contadores cuyos datos está leyendo el código.
Nota
.NET Framework tiene varias API para leer el valor de los contadores de rendimiento de Windows Server 2008, pero este tema supone que usted desea asegurarse de trabajar con contadores registrados para la supervisión con el sistema de limitación de solicitudes y supervisión de rendimiento de Microsoft SharePoint Foundation.
Para leer un contador de rendimiento
Cree un proyecto de aplicación de consola en Microsoft Visual Studio y establezca la plataforma de CPU y .NET Framework de destino.
Agregue una referencia a Microsoft.SharePoint.dll del proyecto de aplicación de consola. Se encuentra en %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI.
Abra el archivo program.cs y defina un espacio de nombres y un nombre de clase apropiados. Agregue instrucciones using para System.Threading, Microsoft.SharePoint, Microsoft.SharePoint.Administration y Microsoft.SharePoint.Utilities. El código debería tener el siguiente aspecto:
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 } }
En el método Main, obtenga una referencia a la aplicación web cuyos supervisores de rendimiento se deben leer. El siguiente código indica cómo hacerlo.
static void Main(string[] args) { Uri webApplicationUri = new Uri("Http://localhost/"); SPWebApplication webApplication = SPWebApplication.Lookup(webApplicationUri); }
Todo el código restante de este tema se agrega al método Main.
Obtenga una referencia a la configuración de límite de la aplicación web y a la colección de monitores registrados.
SPHttpThrottleSettings throttleSettings = SPHttpThrottleSettings.GetHttpThrottleSettings(webApplication); SPSystemPerformanceMonitorCollection monitors = throttleSettings.GenerateMonitors();
Obtenga una referencia al monitor cuyo valor se debe leer. En algunos casos, podrá conocer en el momento del diseño la posición del monitor en la colección y podrá usar un indizador para referirse a él. Si es el último contador, por ejemplo, podría usar esta línea: SPSystemPerformanceCounterMonitor counterMonitor = (SPSystemPerformanceCounterMonitor)monitors[monitors.Count - 1];. Tenga en cuenta que deberá convertir el objeto de monitor en el tipo de monitor no abstracto específico al que pertenece. En otros escenarios, es posible que el código deba iterar toda la colección buscando un monitor con un conjunto particular de valores de propiedad Category, Counter y Instance. En el siguiente ejemplo, el código realiza un bucle a través de todos los monitores registrados, lee la propiedad Value y notifica sus nombres y valores.
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();
Tenga en cuenta que, en el caso de muchos tipos de contadores de rendimiento, siempre se informa un valor predeterminado en la primera lectura del contador, ya que el valor del contador es una función de dos puntos de datos sin formato. Debe leer el contador por segunda vez, tras una pausa, para obtener un valor válido. Por ejemplo, si el contador que se está supervisando es Processor\% Processor Time\_Total, el descriptor de acceso get de Value necesita al menos un segundo para generar un valor válido después de la primera vez que el código de llamada lo lee. Para asegurarse de que su código obtiene un valor correcto, use una llamada de Sleep(Int32) para esperar al menos un segundo y, a continuación, lea Value nuevamente. El siguiente código ilustra lo expuesto:
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();
Sugerencia Cuando tenga un valor válido, si necesita nuevamente el mismo valor, use la propiedad LastValue. Una nueva lectura de Value ocasiona otra búsqueda del valor subyacente del contador, que normalmente es un valor diferente.