Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original
Este tema aún no ha recibido ninguna valoración - Valorar este tema

PerformanceCounterType (Enumeración)

Especifica la fórmula que se utiliza para calcular el método NextValue para una instancia de PerformanceCounter.

Espacio de nombres:  System.Diagnostics
Ensamblado:  System (en System.dll)
public enum PerformanceCounterType
Nombre de miembroDescripción
AverageBaseContador base que se utiliza para calcular el promedio de tiempos o recuentos, como AverageTimer32 y AverageCount64. Almacena el denominador que se utiliza en el cálculo de un contador para presentar el "tiempo por operación" o el "recuento por operación".
AverageCount64Contador de promedio que muestra cuántos elementos se procesan de promedio durante una operación. Los contadores de este tipo muestran la relación entre los elementos procesados y el número de operaciones completadas. Dicha relación se calcula comparando el número de elementos procesados durante el último intervalo con el número de operaciones completadas durante el mismo intervalo.

Fórmula: (N 1 -N 0)/(B 1 -B 0), donde N 1 y N 0 son las lecturas del contador de rendimiento, y B 1 y B 0 son sus valores AverageBase correspondientes. De esta forma, el numerador representa los números de elementos procesados durante el intervalo de la muestra, y el denominador representa el número de operaciones completadas durante ese mismo intervalo.

Entre los contadores de este tipo se encuentra DiscoFísico\ Media de bytes/transferencia.

AverageTimer32Contador de tipo promedio que mide el tiempo transcurrido, de promedio, para completar un proceso u operación. Los contadores de este tipo muestran la relación entre el tiempo total transcurrido del intervalo de muestra y el número de procesos u operaciones completadas durante dicho tiempo. Este tipo de contador mide el tiempo en pasos del reloj del sistema.

Fórmula: ((N 1 -N 0)/F)/(B 1 -B 0), donde N 1 y N 0 son las lecturas del contador de rendimiento, B 1 y B 0 son sus valores AverageBase correspondientes, y F es el número de pasos por segundo. El valor de F se calcula en la ecuación de manera que el resultado se pueda mostrar en segundos. Así, el numerador representa el número de pasos contados durante el último intervalo de muestra, F representa la frecuencia de los pasos y el denominador representa el número de operaciones completadas durante dicho intervalo.

Entre los contadores de este tipo se encuentra DiscoFísico\ Media en segundos/transferencia.

CounterDelta32Contador de diferencia que muestra la variación del atributo medido entre los dos intervalos de muestra más recientes.

Fórmula: N 1 -N 0, donde N 1 y N 0 son las lecturas del contador de rendimiento.

CounterDelta64Contador de diferencia que muestra la variación del atributo medido entre los dos intervalos de muestra más recientes. Es lo mismo que el tipo de contador CounterDelta32, salvo que utiliza campos de mayor tamaño para poder albergar valores más grandes.

Fórmula: N 1 -N 0, donde N 1 y N 0 son las lecturas del contador de rendimiento.

CounterMultiBaseContador base que indica el número de elementos analizados en la muestra. Se utiliza como denominador en los cálculos, para obtener un promedio de los elementos muestreados al tomar mediciones de tiempo de varios elementos similares. Se utiliza con CounterMultiTimer, CounterMultiTimerInverse, CounterMultiTimer100Ns y CounterMultiTimer100NsInverse.
CounterMultiTimerContador de porcentaje que muestra el tiempo activo de uno o más componentes como un porcentaje del tiempo total del intervalo de muestra. Debido a que el numerador registra el tiempo activo de componentes que funcionan simultáneamente, el porcentaje resultante puede superar el 100 por ciento.

Este contador es un temporizador múltiple. Los temporizadores múltiples obtienen datos de más de una instancia de un componente, como un procesador o unidad de disco. Este tipo de contador se diferencia de CounterMultiTimer100Ns en que mide el tiempo en unidades de pasos del contador de rendimiento del sistema, en lugar de unidades de 100 nanosegundos.

Fórmula: ((N 1 - N 0) / (D 1 - D 0)) x 100 / B, donde N 1 y N 0 son lecturas del contador de rendimiento, D 1 y D 0 son las correspondientes lecturas de tiempo en pasos del contador de rendimiento del sistema, y la variable B representa la base de recuento de los componentes supervisados (utilizando un contador base del tipo CounterMultiBase). Así, el numerador representa las partes del intervalo de muestra durante las cuales estaban activos los componentes supervisados, y el denominador representa el tiempo total transcurrido del intervalo de muestra.

CounterMultiTimer100NsContador de porcentaje que muestra el tiempo activo de uno o más componentes como un porcentaje del tiempo total del intervalo de muestra. Mide el tiempo en unidades de 100 nanosegundos (ns).

Este tipo de contador es un temporizador múltiple. Los temporizadores múltiples están diseñados para supervisar más de una instancia de un componente, como un procesador o unidad de disco.

Fórmula: ((N 1 - N 0) / (D 1 - D 0)) x 100 / B, donde N 1 y N 0 son lecturas del contador de rendimiento, D 1 y D 0 son las correspondientes lecturas de tiempo en unidades de 100 nanosegundos, y la variable B representa la base de recuento de los componentes supervisados (utilizando un contador base del tipo CounterMultiBase). Así, el numerador representa las partes del intervalo de muestra durante las cuales estaban activos los componentes supervisados, y el denominador representa el tiempo total transcurrido del intervalo de muestra.

CounterMultiTimer100NsInverseContador de porcentaje que muestra el tiempo activo de uno o más componentes como un porcentaje del tiempo total del intervalo de muestra. Los contadores de este tipo miden el tiempo en unidades de 100 nanosegundos (ns). Derivan el tiempo activo midiendo el tiempo durante el cual los componentes no estaban activos y restándole el resultado de multiplicar 100 por ciento por el número de objetos supervisados.

Este tipo de contador es un temporizador múltiple inverso. Los temporizadores múltiples están diseñados para supervisar más de una instancia de un componente, como un procesador o unidad de disco. Los contadores inversos miden el tiempo en que un componente no está activo y derivan su tiempo activo a partir de la medición del tiempo inactivo.

Fórmula: (B - ((N 1 - N 0) / (D 1 - D 0))) x 100, donde el denominador representa el tiempo total transcurrido del intervalo de muestra, el numerador representa el tiempo del intervalo durante el cual estaban inactivos los componentes supervisados, y B representa el número de componentes supervisados, utilizando un contador base de tipo CounterMultiBase.

CounterMultiTimerInverseContador de porcentaje que muestra el tiempo activo de uno o más componentes como un porcentaje del tiempo total del intervalo de muestra. Deriva el tiempo activo midiendo el tiempo durante el cual los componentes no estaban activos y restándole el resultado de multiplicar 100 por ciento por el número de objetos supervisados.

Este tipo de contador es un temporizador múltiple inverso. Los temporizadores múltiples supervisan más de una instancia de un componente, como un procesador o unidad de disco. Los contadores inversos miden el tiempo en que un componente no está activo y derivan su tiempo activo de dicha medición.

Este contador se diferencia de CounterMultiTimer100NsInverse en que mide el tiempo en unidades de pasos del contador de rendimiento del sistema, en lugar de unidades de 100 nanosegundos.

Fórmula: (B - ((N 1 - N 0) / (D 1 - D 0))) x 100, donde el denominador representa el tiempo total transcurrido del intervalo de muestra, el numerador representa el tiempo del intervalo durante el cual estaban inactivos los componentes supervisados, y B representa el número de componentes supervisados, utilizando un contador base de tipo CounterMultiBase.

CounterTimerContador de porcentaje que muestra el promedio de tiempo que un componente está activo como un porcentaje del tiempo de muestra total.

Fórmula: (N 1 - N 0) / (D 1 - D 0), donde N 1 y N 0 son las lecturas del contador de rendimiento, y D 1 y D 0 son sus correspondientes lecturas de tiempo. Así, el numerador representa las partes del intervalo de muestra durante las cuales estaban activos los componentes supervisados, y el denominador representa el tiempo total transcurrido del intervalo de muestra.

CounterTimerInverseContador de porcentaje que muestra el porcentaje promedio de tiempo activo observado durante el intervalo de muestra. El valor de estos contadores se calcula supervisando el porcentaje de tiempo que el servicio estuvo inactivo y restando ese valor del 100 por ciento.

Este tipo de contador es un contador inverso. Los contadores inversos miden el tiempo en que un componente no está activo y derivan su tiempo activo de dicha medición. Este tipo de contador es igual a CounterTimer100NsInv, excepto en que mide el tiempo en unidades de pasos del contador de rendimiento del sistema, en lugar de unidades de 100 nanosegundos.

Fórmula: (1- ((N 1 - N 0) / (D 1 - D 0))) x 100, donde el numerador representa el tiempo del intervalo durante el cual los componentes supervisados estuvieron inactivos, y el denominador representa el tiempo total transcurrido del intervalo de muestra.

CountPerTimeInterval32Contador de promedio diseñado para supervisar la longitud promedio de la cola de un recurso a lo largo de un determinado período de tiempo. Muestra la diferencia entre las longitudes de cola observadas durante los dos últimos intervalos de muestra, dividida por la duración del intervalo. Este tipo de contador se utiliza normalmente para hacer un seguimiento del número de elementos que están en la cola o a la espera.

Fórmula: (N 1 - N 0) / (D 1 - D 0), donde el numerador representa el número de elementos de la cola y el denominador representa el tiempo transcurrido durante el último intervalo de muestra.

CountPerTimeInterval64Contador de promedio que supervisa la longitud promedio de la cola de un recurso a lo largo de un determinado período de tiempo. Los contadores de este tipo muestran la diferencia entre las longitudes de cola observadas durante los dos últimos intervalos de muestra, dividida por la duración del intervalo. Este tipo de contador es lo mismo que CountPerTimeInterval32, salvo que utiliza campos de mayor tamaño para poder albergar valores más grandes. Este tipo de contador se utiliza normalmente para hacer un seguimiento de un gran volumen o de un número muy elevado de elementos que están en la cola o a la espera.

Fórmula: (N 1 - N 0) / (D 1 - D 0), donde el numerador representa el número de elementos de una cola y el denominador representa el tiempo transcurrido durante el intervalo de muestra.

ElapsedTimeTemporizador de diferencia que muestra el tiempo total transcurrido entre el inicio de un componente o proceso y el momento en que se calcula este valor.

Fórmula: (D 0 - N 0) / F, donde D 0 representa el momento actual, N 0 representa el momento en que se inició el objeto y F representa el número de unidades de tiempo que transcurren en un segundo. El valor de F se calcula en la ecuación de manera que el resultado se pueda mostrar en segundos.

Entre los contadores de este tipo se encuentra Sistema\ Tiempo de actividad del sistema.

NumberOfItems32Contador instantáneo que muestra el valor observado más reciente. Se utiliza, por ejemplo, para mantener un recuento simple de elementos o de operaciones.

Fórmula: ninguna. No muestra un promedio, sino que muestra los datos sin procesar, tal y como se recopilan.

Entre los contadores de este tipo se encuentra Memoria\Bytes disponibles.

NumberOfItems64Contador instantáneo que muestra el valor observado más reciente. Se utiliza, por ejemplo, para mantener un recuento simple de un número muy elevado de elementos o de operaciones. Este tipo de contador es lo mismo que NumberOfItems32, salvo que utiliza campos de mayor tamaño para poder albergar valores más grandes.

Fórmula: ninguna. No muestra un promedio, sino que muestra los datos sin procesar, tal y como se recopilan.

NumberOfItemsHEX32Contador instantáneo que muestra el valor observado más reciente en formato hexadecimal. Se utiliza, por ejemplo, para mantener un recuento simple de elementos o de operaciones.

Fórmula: ninguna. No muestra un promedio, sino que muestra los datos sin procesar, tal y como se recopilan.

NumberOfItemsHEX64Contador instantáneo que muestra el valor observado más reciente. Se utiliza, por ejemplo, para mantener un recuento simple de un número muy elevado de elementos o de operaciones. Este tipo de contador es lo mismo que NumberOfItemsHEX32, salvo que utiliza campos de mayor tamaño para poder albergar valores más grandes.

Fórmula: ninguna. No muestra un promedio, sino que muestra los datos sin procesar, tal y como se recopilan.

RateOfCountsPerSecond32Contador de diferencia que muestra el número promedio de operaciones completadas durante cada segundo del intervalo de muestra. Este tipo de contador mide el tiempo en pasos del reloj del sistema.

Fórmula: (N 1 - N 0) / ((D 1 -D 0) / F), donde N 1 y N 0 son las lecturas del contador de rendimiento, D 1 y D 0 son sus correspondientes lecturas de tiempo, y F representa el número de pasos por segundo. Así, este numerador representa el número de operaciones realizadas durante el último intervalo de muestra, el denominador representa el número de pasos transcurridos desde el último intervalo de muestra y F representa la frecuencia de los pasos. El valor de F se calcula en la ecuación de manera que el resultado se pueda mostrar en segundos.

Entre los contadores de este tipo se encuentra Sistema\ Operaciones de lectura de archivo/s.

RateOfCountsPerSecond64Contador de diferencia que muestra el número promedio de operaciones completadas durante cada segundo del intervalo de muestra. Este tipo de contador mide el tiempo en pasos del reloj del sistema. Este tipo de contador es el mismo que el tipo RateOfCountsPerSecond32, pero utiliza campos más grandes para albergar valores más grandes y así supervisar un alto número de elementos u operaciones por segundo, como por ejemplo una tasa de transmisión de bytes.

Fórmula: (N 1 - N 0) / ((D 1 -D 0) / F), donde N 1 y N 0 son las lecturas del contador de rendimiento, D 1 y D 0 son sus correspondientes lecturas de tiempo, y F representa el número de pasos por segundo. Así, este numerador representa el número de operaciones realizadas durante el último intervalo de muestra, el denominador representa el número de pasos transcurridos desde el último intervalo de muestra y F representa la frecuencia de los pasos. El valor de F se calcula en la ecuación de manera que el resultado se pueda mostrar en segundos.

Entre los contadores de este tipo se encuentra Sistema\ Bytes de lectura de archivo/s.

RawBaseContador base que almacena el denominador de un contador que presenta una fracción aritmética general. Compruebe que este valor es mayor que cero antes de utilizarlo como denominador para calcular el valor RawFraction.
RawFractionContador de porcentaje instantáneo que muestra la relación entre un subconjunto y su conjunto, en porcentaje. Por ejemplo, compara el número de bytes utilizados en un disco con el número total de bytes que contiene el disco. Los contadores de este tipo muestran sólo el porcentaje actual, no un promedio a lo largo del tiempo.

Fórmula: (N 0 / D 0) x 100, donde D 0 representa un atributo medido (utilizando un contador base de tipo RawBase) y N 0 representa un componente de ese atributo.

Entre los contadores de este tipo se encuentra Archivo de paginación\% Uso máximo.

SampleBaseContador base que almacena el número de interrupciones de muestreo tomadas y se utiliza como denominador en la fracción de muestreo. La fracción de muestreo es el número de muestras que dieron 1 (o true) para una interrupción de muestra. Compruebe que este valor es mayor que cero antes de utilizarlo como denominador para calcular SampleFraction.
SampleCounterContador de promedio que muestra el promedio de operaciones completadas en un segundo. Cuando un contador de este tipo toma una muestra de los datos, cada interrupción de muestreo devuelve uno o cero. Los datos del contador son el número de contadores muestreados. Mide el tiempo en unidades de pasos del temporizador de rendimiento del sistema.

Fórmula: (N 1 – N 0) / ((D 1 – D 0) / F), donde el numerador (N) representa el número de operaciones terminadas, el denominador (D) representa el tiempo transcurrido en pasos del temporizador de rendimiento del sistema y F representa el número de pasos que transcurren en un segundo. F se calcula en la ecuación de manera que el resultado se pueda mostrar en segundos.

SampleFractionContador de porcentaje que muestra la relación media entre el número de aciertos y todas las operaciones realizadas durante los dos últimos intervalos de muestra.

Fórmula: ((N 1 - N 0) / (D 1 - D 0)) x 100, donde el numerador representa el número de operaciones satisfactorias durante el último intervalo de muestra, y el denominador representa la variación en el número de todas las operaciones (del tipo medido) completadas durante el intervalo de muestra, utilizando contadores de tipo SampleBase.

Entre los contadores de este tipo se encuentra Caché\% Aciertos de lecturas de anclaje.

Timer100NsContador de porcentaje que muestra el tiempo activo de un componente como un porcentaje del tiempo total transcurrido del intervalo de muestra. Mide el tiempo en unidades de 100 nanosegundos (ns). Los contadores de este tipo están diseñados para medir la actividad de un componente en cada momento.

Fórmula: (N 1 - N 0) / (D 1 - D 0) x 100, donde el numerador representa las partes del intervalo de muestra durante las que los componentes supervisados estuvieron activos, y el denominador representa el tiempo total transcurrido del intervalo de muestra.

Entre los contadores de este tipo se encuentra Procesador\ % de tiempo de usuario.

Timer100NsInverseContador de porcentaje que muestra el porcentaje promedio de tiempo activo observado durante el intervalo de muestra.

Este tipo de contador es un contador inverso. Los contadores de este tipo calculan el tiempo activo midiendo el tiempo que estuvo inactivo el servicio y restando el porcentaje de tiempo activo del 100 por ciento.

Fórmula: (1- ((N 1 - N 0) / (D 1 - D 0))) x 100, donde el numerador representa el tiempo del intervalo durante el cual los componentes supervisados estuvieron inactivos, y el denominador representa el tiempo total transcurrido del intervalo de muestra.

Entre los contadores de este tipo se encuentra Procesador\ % de tiempo de procesador.

Algunos tipos de contador representan datos sin procesar, mientras que otros representan valores calculados que se basan en una o más muestras de contador. Las categorías siguientes clasifican los tipos de contadores disponibles.

  • Average (Promedio): mide un valor a lo largo de un período y muestra el promedio entre las dos últimas mediciones. Se asocia a cada contador de promedio un contador base que registra el número de muestras utilizadas.

  • Difference (Diferencia): resta la última medición de la anterior y muestra la diferencia si es positiva; si es negativa, muestra un cero.

  • Instantaneous (Instantánea): muestra la medición más reciente.

  • Percentage (Porcentaje): muestra los valores calculados como un porcentaje.

  • Rate (Tasa): efectúa una muestra de un número de eventos en aumento a lo largo de un período y divide la variación del número de eventos por la variación en tiempo, lo cual refleja una tasa de actividad.

Al realizar muestreos de datos de contadores de rendimiento, utilizar un tipo de contador que represente un promedio puede hacer que los valores de datos sin procesar resulten de utilidad. Por ejemplo, el contador de datos sin procesar NumberOfItems64 puede exponer datos que sean muy aleatorios entre una muestra y otra. La fórmula para calcular el promedio de valores que el contador devuelve sería (X 0 +X 1 +…+X n)/n, donde cada X i representa una muestra de contador sin formato.

Los contadores de tasa son similares a los contadores de promedio, pero son más útiles en situaciones donde la tasa aumenta a medida que se utiliza un recurso. Una fórmula que calcula rápidamente el promedio es ((X n -X 0)/(T n -T 0)) / frecuencia, donde cada X i es una muestra de contador y cada T i es el tiempo que se tomó la correspondiente muestra. El resultado es el promedio de uso por segundo.

NotaNota

A menos que se indique lo contrario, la base de tiempo se expresa en segundos.

Al instrumentar aplicaciones (crear y escribir contadores de rendimiento personalizados), es posible trabajar con tipos de contador basados en un contador base complementario que se utilice en los cálculos. El contador base debe encontrarse inmediatamente después del contador asociado en la colección CounterCreationDataCollection que utiliza la aplicación. En la siguiente tabla se muestran los tipos de contador base con los tipos de contador de rendimiento correspondientes.

Tipo de contador base

Tipos de contador de rendimiento

AverageBase

AverageTimer32

AverageCount64

CounterMultiBase

CounterMultiTimer

CounterMultiTimerInverse

CounterMultiTimer100Ns

CounterMultiTimer100NsInverse

RawBase

RawFraction

SampleBase

SampleFraction

En los ejemplos siguientes se muestran algunos de los tipos de contador de la enumeración PerformanceCounterType.

AverageCount64



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("++++++++++++++++++++++");
	}
}


AverageTimer32



using System;
using System.Collections;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Runtime.InteropServices;

public class App
{

    private static PerformanceCounter PC;
    private static PerformanceCounter BPC;

    private const String categoryName = "AverageTimer32SampleCategory";
    private const String counterName = "AverageTimer32Sample";
    private const String baseCounterName = "AverageTimer32SampleBase";

    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(categoryName))
        {

            CounterCreationDataCollection CCDC = new CounterCreationDataCollection();

            // Add the counter.
            CounterCreationData averageTimer32 = new CounterCreationData();
            averageTimer32.CounterType = PerformanceCounterType.AverageTimer32;
            averageTimer32.CounterName = counterName;
            CCDC.Add(averageTimer32);

            // Add the base counter.
            CounterCreationData averageTimer32Base = new CounterCreationData();
            averageTimer32Base.CounterType = PerformanceCounterType.AverageBase;
            averageTimer32Base.CounterName = baseCounterName;
            CCDC.Add(averageTimer32Base);

            // Create the category.
            PerformanceCounterCategory.Create(categoryName, 
                "Demonstrates usage of the AverageTimer32 performance counter type", 
                PerformanceCounterCategoryType.SingleInstance, CCDC);

            Console.WriteLine("Category created - " + categoryName);

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

    private static void CreateCounters()
    {
        // Create the counters.
        PC = new PerformanceCounter(categoryName,
                 counterName,
                 false);

        BPC = new PerformanceCounter(categoryName,
            baseCounterName,
            false);

        PC.RawValue = 0;
        BPC.RawValue = 0;
    }


    private static void CollectSamples(ArrayList samplesList)
    {

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

        // Loop for the samples.
        for (int i = 0; i < 10; i++)
        {

            PC.RawValue = Stopwatch.GetTimestamp();

            BPC.IncrementBy(10);

            System.Threading.Thread.Sleep(1000);

            Console.WriteLine("Next value = " + PC.NextValue().ToString());
            samplesList.Add(PC.NextSample());

        }

    }

    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 = " +
                CounterSample.Calculate((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]));

        }
    }



    //++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//+++++++
    // PERF_AVERAGE_TIMER
    //  Description - This counter type measures the time it takes, on 
    //     average, to complete a process or operation. Counters of this
    //     type display a ratio of the total elapsed time of the sample 
    //     interval to the number of processes or operations completed
    //     during that time. This counter type measures time in ticks 
    //     of the system clock. The F variable represents the number of
    //     ticks per second. The value of F is factored into the equation
    //     so that the result can be displayed in seconds.
    //    
    //  Generic type - Average
    //    
    //  Formula - ((N1 - N0) / F) / (D1 - D0), where the numerator (N)
    //     represents the number of ticks counted during the last 
    //     sample interval, F represents the frequency of the ticks, 
    //     and the denominator (D) represents the number of operations
    //     completed during the last sample interval.
    //    
    //  Average - ((Nx - N0) / F) / (Dx - D0)
    //    
    //  Example - PhysicalDisk\ Avg. Disk sec/Transfer 
    //++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//+++++++
    private static Single MyComputeCounterValue(CounterSample s0, CounterSample s1)
    {
        Int64 n1 = s1.RawValue;
        Int64 n0 = s0.RawValue;
        ulong f = (ulong)s1.SystemFrequency;
        Int64 d1 = s1.BaseValue;
        Int64 d0 = s0.BaseValue;

        double numerator = (double)(n1 - n0);
        double denominator = (double)(d1 - d0);
        Single counterValue = (Single)((numerator / f) / denominator);
        return (counterValue);
    }

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



ElapsedTime



using System;
using System.Collections;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Runtime.InteropServices;

public class App 
{

    public static void Main()
    {	
        CollectSamples();
    }


    public static void CollectSamples()
    {
        const String categoryName = "ElapsedTimeSampleCategory";
        const String counterName = "ElapsedTimeSample";

        // 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 ( !PerformanceCounterCategory.Exists(categoryName) ) 
        {

            CounterCreationDataCollection CCDC = new CounterCreationDataCollection();

            // Add the counter.
            CounterCreationData ETimeData = new CounterCreationData();
            ETimeData.CounterType = PerformanceCounterType.ElapsedTime;
            ETimeData.CounterName = counterName;
            CCDC.Add(ETimeData);	   
		
            // Create the category.
            PerformanceCounterCategory.Create(categoryName,
                    "Demonstrates ElapsedTime performance counter usage.",
                PerformanceCounterCategoryType.SingleInstance, CCDC);
            // Return, rerun the application to make use of the new counters.
            return;

        }
        else
        {
            Console.WriteLine("Category exists - {0}", categoryName);
        }        

        // Create the performance counter.
        PerformanceCounter PC = new PerformanceCounter(categoryName, 
                                                       counterName, 
                                                       false);
        // Initialize the counter.
        PC.RawValue = Stopwatch.GetTimestamp();

        DateTime Start = DateTime.Now;

        // Loop for the samples.
        for (int j = 0; j < 100; j++) 
        {
            // Output the values.
            if ((j % 10) == 9) 
            {
                Console.WriteLine("NextValue() = " + PC.NextValue().ToString());
                Console.WriteLine("Actual elapsed time = " + DateTime.Now.Subtract(Start).ToString());
                OutputSample(PC.NextSample());
            }

            // Reset the counter on every 20th iteration.
            if (j % 20 == 0)
            {
                PC.RawValue = Stopwatch.GetTimestamp();
                Start = DateTime.Now;
            }
            System.Threading.Thread.Sleep(50);
        }

        Console.WriteLine("Elapsed time = " + DateTime.Now.Subtract(Start).ToString());
    }

	
    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("++++++++++++++++++++++");
    }
}


NumberOfItems32


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

public class NumberOfItems64
{

	private static PerformanceCounter PC;

	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("NumberOfItems32SampleCategory") ) 
        {

            CounterCreationDataCollection CCDC = new CounterCreationDataCollection();

            // Add the counter.
            CounterCreationData NOI64 = new CounterCreationData();
            NOI64.CounterType = PerformanceCounterType.NumberOfItems64;
            NOI64.CounterName = "NumberOfItems32Sample";
            CCDC.Add(NOI64);

            // Create the category.
            PerformanceCounterCategory.Create("NumberOfItems32SampleCategory",
                "Demonstrates usage of the NumberOfItems32 performance counter type.",
                PerformanceCounterCategoryType.SingleInstance, CCDC);

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

    private static void CreateCounters()
    {
        // Create the counter.
        PC = new PerformanceCounter("NumberOfItems32SampleCategory", 
			"NumberOfItems32Sample", 
			false);

        PC.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);

			PC.IncrementBy(value);

			if ((j % 10) == 9) 
			{
				OutputSample(PC.NextSample());
				samplesList.Add( PC.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]) );

        }
    }
	

	//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
	//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
	private static Single MyComputeCounterValue(CounterSample s0, CounterSample s1)
	{
		Single counterValue = s1.RawValue;
		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("++++++++++++++++++++++");
	}


	
}


NumberOfItems64


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

public class NumberOfItems64
{

	private static PerformanceCounter PC;

	public static void Main()
	{	
		ArrayList samplesList = new ArrayList();

        // If the category does not exist, create the category and exit.
        // Perfomance 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("NumberOfItems64SampleCategory") ) 
		{

			CounterCreationDataCollection CCDC = new CounterCreationDataCollection();

			// Add the counter.
			CounterCreationData NOI64 = new CounterCreationData();
			NOI64.CounterType = PerformanceCounterType.NumberOfItems64;
			NOI64.CounterName = "NumberOfItems64Sample";
			CCDC.Add(NOI64);

			// Create the category.
			PerformanceCounterCategory.Create("NumberOfItems64SampleCategory",
                "Demonstrates usage of the NumberOfItems64 performance counter type.",
                PerformanceCounterCategoryType.SingleInstance, CCDC);
			return(true);
		}
		else
		{
			Console.WriteLine("Category exists - NumberOfItems64SampleCategory");
			return(false);
		}
	}

    private static void CreateCounters()
    {
        // Create the counters.
        PC = new PerformanceCounter("NumberOfItems64SampleCategory", 
            "NumberOfItems64Sample", 
            false);

        PC.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);

            PC.IncrementBy(value);

            if ((j % 10) == 9) 
            {
                OutputSample(PC.NextSample());
                samplesList.Add( PC.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]) );

		}
	}

	
	//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
	//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
	private static Single MyComputeCounterValue(CounterSample s0, CounterSample s1)
	{
		Single counterValue = s1.RawValue;
		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("++++++++++++++++++++++");
	}

}


SampleFraction


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

// Provides a SampleFraction counter to measure the percentage of the user processor 
// time for this process to total processor time for the process.
public class App
{

    private static PerformanceCounter perfCounter;
    private static PerformanceCounter basePerfCounter;
    private static Process thisProcess = Process.GetCurrentProcess();

    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("SampleFractionCategory"))
        {

            CounterCreationDataCollection CCDC = new CounterCreationDataCollection();

            // Add the counter.
            CounterCreationData sampleFraction = new CounterCreationData();
            sampleFraction.CounterType = PerformanceCounterType.SampleFraction;
            sampleFraction.CounterName = "SampleFractionSample";
            CCDC.Add(sampleFraction);

            // Add the base counter.
            CounterCreationData sampleFractionBase = new CounterCreationData();
            sampleFractionBase.CounterType = PerformanceCounterType.SampleBase;
            sampleFractionBase.CounterName = "SampleFractionSampleBase";
            CCDC.Add(sampleFractionBase);

            // Create the category.
            PerformanceCounterCategory.Create("SampleFractionCategory",
                "Demonstrates usage of the SampleFraction performance counter type.",
                PerformanceCounterCategoryType.SingleInstance, CCDC);

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

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

        perfCounter = new PerformanceCounter("SampleFractionCategory",
            "SampleFractionSample",
            false);


        basePerfCounter = new PerformanceCounter("SampleFractionCategory",
            "SampleFractionSampleBase",
            false);


        perfCounter.RawValue = thisProcess.UserProcessorTime.Ticks;
        basePerfCounter.RawValue = thisProcess.TotalProcessorTime.Ticks;
    }
    private static void CollectSamples(ArrayList samplesList)
    {


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

            perfCounter.IncrementBy(thisProcess.UserProcessorTime.Ticks);

            basePerfCounter.IncrementBy(thisProcess.TotalProcessorTime.Ticks);

            if ((j % 10) == 9)
            {
                OutputSample(perfCounter.NextSample());
                samplesList.Add(perfCounter.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 provides A percentage counter that shows the 
    // average ratio of user proccessor time to total processor time  during the last 
    // two sample intervals.
    //++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
    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 = 100 * (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("++++++++++++++++++++++");
    }
}


RateOfCountsPerSecond32


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

public class App 
{
    private static PerformanceCounter PC;

	public static void Main()
	{	
		ArrayList samplesList = new ArrayList();

        // If the category does not exist, create the category and exit.
        // Perfomance 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("RateOfCountsPerSecond32SampleCategory") ) 
        {


            CounterCreationDataCollection CCDC = new CounterCreationDataCollection();

            // Add the counter.
            CounterCreationData rateOfCounts32 = new CounterCreationData();
            rateOfCounts32.CounterType = PerformanceCounterType.RateOfCountsPerSecond32;
            rateOfCounts32.CounterName = "RateOfCountsPerSecond32Sample";
            CCDC.Add(rateOfCounts32);
	        
             // Create the category.
            PerformanceCounterCategory.Create("RateOfCountsPerSecond32SampleCategory", 
                "Demonstrates usage of the RateOfCountsPerSecond32 performance counter type.",
                PerformanceCounterCategoryType.SingleInstance, CCDC); 
              return(true);
        }
        else
        {
            Console.WriteLine("Category exists - RateOfCountsPerSecond32SampleCategory");
            return(false);
        }
    }

    private static void CreateCounters()
    {
        // Create the counter.
        PC = new PerformanceCounter("RateOfCountsPerSecond32SampleCategory", 
            "RateOfCountsPerSecond32Sample", 
            false);

        PC.RawValue=0;

    }

    private static void CollectSamples(ArrayList samplesList)
    {
	
        Random r = new Random( DateTime.Now.Millisecond );

        // Initialize the performance counter.
        PC.NextSample();

        // Loop for the samples.
        for (int j = 0; j < 100; j++) 
        {
	        
            int value = r.Next(1, 10);
            PC.IncrementBy(value);
            Console.Write(j + " = " + value);

            if ((j % 10) == 9) 
            {
                Console.WriteLine(";       NextValue() = " + PC.NextValue().ToString());
                OutputSample(PC.NextSample());
                samplesList.Add( PC.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]) );


		}
	}


	//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
	//	PERF_COUNTER_COUNTER
	//	Description	 - This counter type shows the average number of operations completed
	//		during each second of the sample interval. Counters of this type
	//		measure time in ticks of the system clock. The F variable represents
	//		the number of ticks per second. The value of F is factored into the
	//		equation so that the result can be displayed in seconds.
	//
    //	Generic type - Difference
	//
	//	Formula - (N1 - N0) / ( (D1 - D0) / F), where the numerator (N) represents the number
	//		of operations performed during the last sample interval, the denominator
	//		(D) represents the number of ticks elapsed during the last sample
	//		interval, and F is the frequency of the ticks.
	//
	//	     Average - (Nx - N0) / ((Dx - D0) / F) 
	//
	//       Example - System\ File Read Operations/sec 
	//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
	private static Single MyComputeCounterValue(CounterSample s0, CounterSample s1)
	{
		Single numerator = (Single)(s1.RawValue - s0.RawValue);
		Single denomenator = (Single)(s1.TimeStamp - s0.TimeStamp) / (Single)s1.SystemFrequency;
		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("++++++++++++++++++++++");
	}

}



RateOfCountsPerSecond64


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

public class App
{
    private static PerformanceCounter PC;

    public static void Main()
    {
        ArrayList samplesList = new ArrayList();

        // If the category does not exist, create the category and exit.
        // Perfomance 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("RateOfCountsPerSecond64SampleCategory"))
        {


            CounterCreationDataCollection CCDC = new CounterCreationDataCollection();

            // Add the counter.
            CounterCreationData rateOfCounts64 = new CounterCreationData();
            rateOfCounts64.CounterType = PerformanceCounterType.RateOfCountsPerSecond64;
            rateOfCounts64.CounterName = "RateOfCountsPerSecond64Sample";
            CCDC.Add(rateOfCounts64);

            // Create the category.
            PerformanceCounterCategory.Create("RateOfCountsPerSecond64SampleCategory",
                "Demonstrates usage of the RateOfCountsPerSecond64 performance counter type.",
                PerformanceCounterCategoryType.SingleInstance, CCDC);
            return (true);
        }
        else
        {
            Console.WriteLine("Category exists - RateOfCountsPerSecond64SampleCategory");
            return (false);
        }
    }

    private static void CreateCounters()
    {
        // Create the counter.
        PC = new PerformanceCounter("RateOfCountsPerSecond64SampleCategory",
            "RateOfCountsPerSecond64Sample",
            false);

        PC.RawValue = 0;

    }

    private static void CollectSamples(ArrayList samplesList)
    {

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

        // Initialize the performance counter.
        PC.NextSample();

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

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

            if ((j % 10) == 9)
            {
                Console.WriteLine(";       NextValue() = " + PC.NextValue().ToString());
                OutputSample(PC.NextSample());
                samplesList.Add(PC.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]));


        }
    }

    //++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
    //	PERF_COUNTER_COUNTER
    //	Description	 - This counter type shows the average number of operations completed
    //		during each second of the sample interval. Counters of this type
    //		measure time in ticks of the system clock. The F variable represents
    //		the number of ticks per second. The value of F is factored into the
    //		equation so that the result can be displayed in seconds.
    //
    //	Generic type - Difference
    //
    //	Formula - (N1 - N0) / ( (D1 - D0) / F), where the numerator (N) represents the number
    //		of operations performed during the last sample interval, the denominator
    //		(D) represents the number of ticks elapsed during the last sample
    //		interval, and F is the frequency of the ticks.
    //
    //	Average - (Nx - N0) / ((Dx - D0) / F) 
    //
    //  Example - System\ File Read Operations/sec 
    //++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
    private static Single MyComputeCounterValue(CounterSample s0, CounterSample s1)
    {
        Single numerator = (Single)(s1.RawValue - s0.RawValue);
        Single denomenator = (Single)(s1.TimeStamp - s0.TimeStamp) / (Single)s1.SystemFrequency;
        Single counterValue = numerator / denomenator;
        return (counterValue);
    }

    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("++++++++++++++++++++++");
    }
}



RawFraction


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


public class App
{
    private static PerformanceCounter PC;
    private static PerformanceCounter BPC;

    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 counters.
        if (SetupCategory())
            return;
        CreateCounters();
        CollectSamples(samplesList);
        CalculateResults(samplesList);
    }

    private static bool SetupCategory()
    {


        if (!PerformanceCounterCategory.Exists("RawFractionSampleCategory"))
        {


            CounterCreationDataCollection CCDC = new CounterCreationDataCollection();

            // Add the counter.
            CounterCreationData rf = new CounterCreationData();
            rf.CounterType = PerformanceCounterType.RawFraction;
            rf.CounterName = "RawFractionSample";
            CCDC.Add(rf);

            // Add the base counter.
            CounterCreationData rfBase = new CounterCreationData();
            rfBase.CounterType = PerformanceCounterType.RawBase;
            rfBase.CounterName = "RawFractionSampleBase";
            CCDC.Add(rfBase);

            // Create the category.
            PerformanceCounterCategory.Create("RawFractionSampleCategory",
                "Demonstrates usage of the RawFraction performance counter type.",
                PerformanceCounterCategoryType.SingleInstance, CCDC);

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

    private static void CreateCounters()
    {
        // Create the counters.
        PC = new PerformanceCounter("RawFractionSampleCategory",
            "RawFractionSample",
            false);

        BPC = new PerformanceCounter("RawFractionSampleCategory",
            "RawFractionSampleBase",
            false);

        PC.RawValue = 0;
        BPC.RawValue = 0;
    }

    private static void CollectSamples(ArrayList samplesList)
    {

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

        // Initialize the performance counter.
        PC.NextSample();

        // Loop for the samples.
        for (int j = 0; j < 100; j++)
        {
            int value = r.Next(1, 10);
            Console.Write(j + " = " + value);

            // Increment the base every time, because the counter measures the number 
            // of high hits (raw fraction value) against all the hits (base value).
            BPC.Increment();

            // Get the % of samples that are 9 or 10 out of all the samples taken.
            if (value >= 9)
                PC.Increment();

            // Copy out the next value every ten times around the loop.
            if ((j % 10) == 9)
            {
                Console.WriteLine(";       NextValue() = " + PC.NextValue().ToString());
                OutputSample(PC.NextSample());
                samplesList.Add(PC.NextSample());
            }
            else
                Console.WriteLine();

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

    }


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

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

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

        }
    }

    //++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
    // Formula from MSDN -
    //      Description - This counter type shows the ratio of a subset to its set as a percentage.
    //			For example, it compares the number of bytes in use on a disk to the
    //			total number of bytes on the disk. Counters of this type display the 
    //			current percentage only, not an average over time.
    //
    // Generic type - Instantaneous, Percentage 
    //	    Formula - (N0 / D0), where D represents a measured attribute and N represents one
    //			component of that attribute.
    //
    //		Average - SUM (N / D) /x 
    //		Example - Paging File\% Usage Peak
    //++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++//++++++++
    private static Single MyComputeCounterValue(CounterSample rfSample)
    {
        Single numerator = (Single)rfSample.RawValue;
        Single denomenator = (Single)rfSample.BaseValue;
        Single counterValue = (numerator / denomenator) * 100;
        return (counterValue);
    }

    // Output information about the counter sample.
    private static void OutputSample(CounterSample s)
    {
        Console.WriteLine("+++++++++++");
        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("++++++++++++++++++++++");
    }



}



.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.