Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Propiedad PerformanceCounter.RawValue

 

Publicado: octubre de 2016

Obtiene o establece el valor sin formato o sin calcular de este contador.

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

[BrowsableAttribute(false)]
public long RawValue { get; set; }

Valor de propiedad

Type: System.Int64

El valor sin formato del contador.

Exception Condition
InvalidOperationException

Está intentando establecer el valor del contador sin formato, pero el contador es de sólo lectura.

O bien

La instancia no está correctamente asociada con un contador de rendimiento.

-o-

El InstanceLifetime propiedad está establecida en Process cuando uso global memoria compartida.

Win32Exception

Error de acceso a la API del sistema.

PlatformNotSupportedException

La plataforma es Windows 98 o Windows Millennium Edition, que no admite los contadores de rendimiento.

UnauthorizedAccessException

Código que se ejecuta sin privilegios administrativos intentó leer un contador de rendimiento.

Si el tipo de contador tiene un tamaño de 32 bits y se intenta establecer esta propiedad en un valor que es demasiado grande para caber, la propiedad trunca el valor a 32 bits. Cuando se leen contadores personalizados en el equipo local, con el RawValue propiedad en lugar de un valor calculado puede producir un rendimiento significativamente mejor en escenarios donde el valor sin formato sea suficiente.

Si el contador que se está leyendo es de sólo lectura, obteniendo el RawValue el contador de ejemplos de propiedad en el momento en que se llama a la propiedad. Esta acción es equivalente a realizar la llamada inicial a la NextSample (método). Si se llama posteriormente NextSample, se pueden realizar cálculos con los valores devueltos por ambas llamadas.

Porque los contadores del sistema son de sólo lectura, puede obtener pero no establecer sus valores sin formato.

System_CAPS_noteNota

El Increment, IncrementBy, y Decrement métodos utilizan interbloqueos para actualizar el valor del contador. Esto ayuda a mantener el valor del contador precisos en escenarios multiproceso, pero también produce una reducción del rendimiento. Si no necesita la precisión que entrelazados proporcionar operaciones, puede actualizar el RawValue propiedad directamente de hasta 5 veces la mejora del rendimiento. Sin embargo, en los escenarios multiproceso, algunas actualizaciones para el valor del contador pueden omitirse, produciendo datos inexactos.

System_CAPS_noteNota

Si el valor de la InstanceLifetime propiedad es Process y la categoría de contador de rendimiento se ha creado con .NET Framework versión 1.0 o 1.1, un InvalidOperationException se produce. Categorías de contador de rendimiento creados con versiones anteriores utilizan la memoria compartida global y el valor de InstanceLifetime debe ser Global. Si no se utiliza la categoría por aplicaciones que se ejecutan en las versiones 1.0 y 1.1 de .NET Framework, elimine y vuelva a la categoría.

System_CAPS_noteNota

Para leer los contadores de rendimiento en Windows Vista, Windows XP Professional x64 Edition o Windows Server 2003, debe ser miembro del grupo usuarios del Monitor de rendimiento o tener privilegios administrativos.

Para evitar tener que elevar sus privilegios para tener acceso a los contadores de rendimiento en Windows Vista, agréguese al grupo usuarios del Monitor de rendimiento.

En Windows Vista, el control de cuentas de usuario (UAC) determina los privilegios de un usuario. Si es miembro del grupo Administradores integrados, se le asignarán dos símbolos (tokens) de acceso en tiempo de ejecución: un símbolo (token) de acceso de usuario estándar y un símbolo (token) de acceso de administrador. De forma predeterminada, se le asignará el rol de usuario estándar. Para ejecutar el código que tiene acceso a los contadores de rendimiento, primero debe elevar sus privilegios de usuario estándar a administrador. Para ello, inicie una aplicación haciendo clic con el botón derecho en el icono de la aplicación e indique que desea ejecutarla como administrador.

En el ejemplo siguiente se utiliza la CounterSample clase para mostrar el valor de la RawValue propiedad para un contador.


using System;
using System.Collections;
using System.Collections.Specialized;
using System.Diagnostics;

public class App {

    private static PerformanceCounter avgCounter64Sample;
    private static PerformanceCounter avgCounter64SampleBase;

    public static void Main()
    {

        ArrayList samplesList = new ArrayList();

        // If the category does not exist, create the category and exit.
        // Performance counters should not be created and immediately used.
        // There is a latency time to enable the counters, they should be created
        // prior to executing the application that uses the counters.
        // Execute this sample a second time to use the category.
        if (SetupCategory())
            return;
        CreateCounters();
        CollectSamples(samplesList);
        CalculateResults(samplesList);

    }

    private static bool SetupCategory()
    {
        if ( !PerformanceCounterCategory.Exists("AverageCounter64SampleCategory") ) 
        {

            CounterCreationDataCollection counterDataCollection = new CounterCreationDataCollection();

            // Add the counter.
            CounterCreationData averageCount64 = new CounterCreationData();
            averageCount64.CounterType = PerformanceCounterType.AverageCount64;
            averageCount64.CounterName = "AverageCounter64Sample";
            counterDataCollection.Add(averageCount64);

            // Add the base counter.
            CounterCreationData averageCount64Base = new CounterCreationData();
            averageCount64Base.CounterType = PerformanceCounterType.AverageBase;
            averageCount64Base.CounterName = "AverageCounter64SampleBase";
            counterDataCollection.Add(averageCount64Base);

            // Create the category.
            PerformanceCounterCategory.Create("AverageCounter64SampleCategory",
                "Demonstrates usage of the AverageCounter64 performance counter type.",
                PerformanceCounterCategoryType.SingleInstance, counterDataCollection);

            return(true);
        }
        else
        {
            Console.WriteLine("Category exists - AverageCounter64SampleCategory");
            return(false);
        }
    }

    private static void CreateCounters()
    {
        // Create the counters.

        avgCounter64Sample = new PerformanceCounter("AverageCounter64SampleCategory", 
            "AverageCounter64Sample", 
            false);


        avgCounter64SampleBase = new PerformanceCounter("AverageCounter64SampleCategory", 
            "AverageCounter64SampleBase", 
            false);

        avgCounter64Sample.RawValue=0;
        avgCounter64SampleBase.RawValue=0;
    }
    private static void CollectSamples(ArrayList samplesList)
    {

        Random r = new Random( DateTime.Now.Millisecond );

        // Loop for the samples.
        for (int j = 0; j < 100; j++) 
        {

            int value = r.Next(1, 10);
            Console.Write(j + " = " + value);

            avgCounter64Sample.IncrementBy(value);

            avgCounter64SampleBase.Increment();

            if ((j % 10) == 9) 
            {
                OutputSample(avgCounter64Sample.NextSample());
                samplesList.Add( avgCounter64Sample.NextSample() );
            }
            else
                Console.WriteLine();

            System.Threading.Thread.Sleep(50);
        }

    }

    private static void CalculateResults(ArrayList samplesList)
    {
        for(int i = 0; i < (samplesList.Count - 1); i++)
        {
            // Output the sample.
            OutputSample( (CounterSample)samplesList[i] );
            OutputSample( (CounterSample)samplesList[i+1] );

            // Use .NET to calculate the counter value.
            Console.WriteLine(".NET computed counter value = " +
                CounterSampleCalculator.ComputeCounterValue((CounterSample)samplesList[i],
                (CounterSample)samplesList[i+1]) );

            // Calculate the counter value manually.
            Console.WriteLine("My computed counter value = " + 
                MyComputeCounterValue((CounterSample)samplesList[i],
                (CounterSample)samplesList[i+1]) );

        }
    }

    //++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
    //    Description - This counter type shows how many items are processed, on average,
    //        during an operation. Counters of this type display a ratio of the items 
    //        processed (such as bytes sent) to the number of operations completed. The  
    //        ratio is calculated by comparing the number of items processed during the 
    //        last interval to the number of operations completed during the last interval. 
    // Generic type - Average
    //      Formula - (N1 - N0) / (D1 - D0), where the numerator (N) represents the number 
    //        of items processed during the last sample interval and the denominator (D) 
    //        represents the number of operations completed during the last two sample 
    //        intervals. 
    //    Average (Nx - N0) / (Dx - D0)  
    //    Example PhysicalDisk\ Avg. Disk Bytes/Transfer 
    //++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
    private static Single MyComputeCounterValue(CounterSample s0, CounterSample s1)
    {
        Single numerator = (Single)s1.RawValue - (Single)s0.RawValue;
        Single denomenator = (Single)s1.BaseValue - (Single)s0.BaseValue;
        Single counterValue = numerator / denomenator;
        return(counterValue);
    }

    // Output information about the counter sample.
    private static void OutputSample(CounterSample s)
    {
        Console.WriteLine("\r\n+++++++++++");
        Console.WriteLine("Sample values - \r\n");
        Console.WriteLine("   BaseValue        = " + s.BaseValue);
        Console.WriteLine("   CounterFrequency = " + s.CounterFrequency);
        Console.WriteLine("   CounterTimeStamp = " + s.CounterTimeStamp);
        Console.WriteLine("   CounterType      = " + s.CounterType);
        Console.WriteLine("   RawValue         = " + s.RawValue);
        Console.WriteLine("   SystemFrequency  = " + s.SystemFrequency);
        Console.WriteLine("   TimeStamp        = " + s.TimeStamp);
        Console.WriteLine("   TimeStamp100nSec = " + s.TimeStamp100nSec);
        Console.WriteLine("++++++++++++++++++++++");
    }
}

PerformanceCounterPermission

for reading the performance counter category. Associated enumeration: F:System.Diagnostics.PerformanceCounterPermissionAccess.Read.

PerformanceCounterPermission

for writing the performance counter category. Associated enumeration: F:System.Diagnostics.PerformanceCounterPermissionAccess.Write.

.NET Framework
Disponible desde 1.1
Volver al principio
Mostrar: