Exportar (0) Imprimir
Expandir todo

PerformanceCounterCategory (Clase)

Representa un objeto de rendimiento que define una categoría de contadores de rendimiento.

Espacio de nombres: System.Diagnostics
Ensamblado: System (en system.dll)

public sealed class PerformanceCounterCategory
public final class PerformanceCounterCategory
public final class PerformanceCounterCategory

NotaNota

El atributo HostProtectionAttribute aplicado a esta clase tiene el siguiente valor para la propiedad Resources: Synchronization | SharedState. HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician al hacer doble clic en un icono, escribir un comando o introducir una dirección URL en un explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación de SQL Server y atributos de protección del host.

NotaImportante:

La creación o eliminación de un contador de rendimiento requiere la sincronización del código subyacente utilizando una exclusión mutua con nombre. Si una aplicación que cuenta con muchos privilegios bloquea la exclusión mutua con nombre, los intentos de crear o eliminar un contador de rendimiento hará que la aplicación deje de responder hasta que desaparezca el bloqueo. Para evitar este problema, no conceda nunca el permiso UnmanagedCode a código que no sea de confianza. Además, el permiso UnmanagedCode permite potencialmente omitir otros permisos y sólo se debería conceder a código de gran confianza.

La propiedad CategoryName de la instancia de PerformanceCounterCategory se muestra en el campo Objeto de rendimiento del cuadro de diálogo Agregar contador de la aplicación Visor de rendimiento.

La clase PerformanceCounterCategory proporciona varios métodos para interactuar con los contadores y las categorías del equipo. Los métodos Create permiten definir categorías personalizadas. El método Delete proporciona un medio para quitar categorías del equipo. El método GetCategories permite ver la lista de categorías, mientras que ReadCategory recupera todos los datos de contadores e instancias asociados a una sola categoría.

Un contador de rendimiento publica los datos de rendimiento relativos a una aplicación. Entre las categorías se incluyen los componentes físicos (como procesadores, discos y memoria) y los objetos del sistema (como procesos y subprocesos). Los contadores del sistema que están relacionados con el mismo objeto de rendimiento se agrupan en una categoría que indica su enfoque común. Cuando se crea una instancia de la clase PerformanceCounter, primero se indica la categoría con la que interactuará el componente y después se elige un contador de dicha categoría.

Por ejemplo, una de las categorías de contadores de Windows es la categoría Memory. Los contadores del sistema de esta categoría hacen un seguimiento de los datos de memoria, por ejemplo, el número de bytes disponibles y el número de bytes almacenados en caché. Por ejemplo, si desea trabajar con los bytes almacenados en caché de la aplicación, debe crear una instancia del componente PerformanceCounter, conectarla a la categoría Memory y después elegir el contador adecuado (en este caso, Cached Bytes) de esa categoría.

Aunque en el sistema hay muchas más categorías de contador disponibles, lo más probable es que las categorías con las que más interactúe sean Cache, Memory, Objects, PhysicalDisk, Process, Processor, Server, System y Thread.

NotaImportante:

El método RemoveInstance en la clase PerformanceCounter liberará el contador y, si está seleccionada la opción Volver a usar para esa categoría, se volverá a usar la instancia del contador. Esto podría causar una condición de anticipación si otro proceso o incluso otra parte del código está intentando escribir en la instancia del contador.

En el ejemplo de código siguiente se determina si hay un PerformanceCounter y su PerformanceCounterCategory en el equipo local o en otro equipo. Si estos objetos no existen en el equipo local, se crean opcionalmente en el ejemplo. Se utiliza el método Exists para determinar si existe PerformanceCounterCategory. Si no existe PerformanceCounterCategory y no hay ningún nombre de contador especificado o si el equipo es un equipo remoto, finaliza el ejemplo.

Si hay un nombre de PerformanceCounter, se utiliza en el ejemplo el método CounterExists y se muestra el resultado al usuario. Si no existe el PerformanceCounter, el usuario puede eliminar y volver a crear PerformanceCounterCategory con el nuevo PerformanceCounter. Si lo hace, se elimina la categoría mediante el método Delete.

Si se solicita, se crea ahora en el ejemplo la nueva PerformanceCounterCategory y el PerformanceCounter mediante el método Create. Si hay un nombre de instancia especificado, se utiliza en el ejemplo el método InstanceExists y se muestra el resultado.

Imports System
Imports System.Diagnostics
Imports Microsoft.VisualBasic

Module PerfCounterCatCreateExistMod

    Sub Main(ByVal args() As String)
        Dim categoryName As String = ""
        Dim counterName As String = ""
        Dim instanceName As String = ""
        Dim machineName As String = ""
        Dim categoryHelp As String = ""
        Dim counterHelp As String = ""
        Dim objectExists As Boolean = False
        Dim pcc As PerformanceCounterCategory
        Dim createCategory As Boolean = False

        ' Copy the supplied arguments into the local variables.
        Try
            categoryName = args(0)
            counterName = args(1)
            instanceName = args(2)
            machineName = IIf(args(3) = ".", "", args(3))
            categoryHelp = args(4)
            counterHelp = args(5)
        Catch ex As Exception
            ' Ignore the exception from non-supplied arguments.
        End Try

        ' Verify that the category name is not blank.
        If categoryName.Length = 0 Then
            Console.WriteLine("Category name cannot be blank.")
            Return
        End If

        ' Check whether the specified category exists.
        If machineName.Length = 0 Then
            objectExists = _
                PerformanceCounterCategory.Exists(categoryName)

        Else
            ' Handle the exception that is thrown if the computer 
            ' cannot be found.
            Try
                objectExists = PerformanceCounterCategory.Exists( _
                    categoryName, machineName)
            Catch ex As Exception
                Console.WriteLine("Error checking for existence of " & _
                    "category ""{0}"" on computer ""{1}"":" & vbCrLf & _
                    ex.Message, categoryName, machineName)
                Return
            End Try
        End If

        ' Tell the user whether the specified category exists.
        Console.WriteLine("Category ""{0}"" " & _
            IIf(objectExists, "exists on ", "does not exist on ") & _
            IIf(machineName.Length > 0, _
                "computer ""{1}"".", "this computer."), _
            categoryName, machineName)

        ' If no counter name is given, the program cannot continue.
        If counterName.Length = 0 Then
            Return
        End If

        ' A category can only be created on the local computer.
        If Not objectExists Then
            If machineName.Length > 0 Then
                Return
            Else
                createCategory = True
            End If
        Else
            ' Check whether the specified counter exists.
            If machineName.Length = 0 Then
                objectExists = PerformanceCounterCategory.CounterExists( _
                    counterName, categoryName)
            Else
                objectExists = PerformanceCounterCategory.CounterExists( _
                    counterName, categoryName, machineName)
            End If

            ' Tell the user whether the counter exists.
            Console.WriteLine("Counter ""{0}"" " & _
                IIf(objectExists, "exists", "does not exist") & _
                " in category ""{1}"" on " & _
                IIf(machineName.Length > 0, _
                    "computer ""{2}"".", "this computer."), _
                counterName, categoryName, machineName)

            ' If the counter does not exist, consider creating it.
            If Not objectExists Then

                ' If this is a remote computer, 
                ' exit because the category cannot be created.
                If machineName.Length > 0 Then
                    Return
                Else
                    ' Ask whether the user wants to recreate the category.
                    Console.Write("Do you want to delete and recreate " & _
                        "category ""{0}"" with your new counter? [Y/N]: ", _
                        categoryName)
                    Dim userReply As String = Console.ReadLine()

                    ' If yes, delete the category so it can be recreated later.
                    If userReply.Trim.ToUpper.Chars(0) = "Y" Then
                        PerformanceCounterCategory.Delete(categoryName)
                        createCategory = True
                    Else
                        Return
                    End If
                End If
            End If
        End If

        ' Create the category if it was deleted or it never existed.
        If createCategory Then
            pcc = PerformanceCounterCategory.Create( _
                categoryName, categoryHelp, counterName, counterHelp)

            Console.WriteLine( _
                "Category ""{0}"" with counter ""{1}"" created.", _
                pcc.CategoryName, counterName)

        ElseIf instanceName.Length > 0 Then

            ' If an instance name was given, check whether it exists.
            If machineName.Length = 0 Then
                objectExists = PerformanceCounterCategory.InstanceExists( _
                    instanceName, categoryName)
            Else
                objectExists = PerformanceCounterCategory.InstanceExists( _
                    instanceName, categoryName, machineName)
            End If

            ' Tell the user whether the instance exists.
            Console.WriteLine("Instance ""{0}"" " & _
                IIf(objectExists, "exists", "does not exist") & _
                " in category ""{1}"" on " & _
                IIf(machineName.Length > 0, _
                    "computer ""{2}"".", "this computer."), _
                instanceName, categoryName, machineName)
        End If
    End Sub
End Module

System.Object
  System.Diagnostics.PerformanceCounterCategory

Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0, 1.1, 1.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft