2009-09-11 6 views

risposta

35

Ecco un esempio di codice che ho scritto una volta per fare esattamente questo.

Prima di tutto, è necessario specificare e installare i contatori delle prestazioni in questione. È possibile farlo utilizzando un programma di installazione:

public class CreditPerformanceMonitorInstaller : Installer 
{ 
    private PerformanceCounterInstaller counterInstaller_; 

    public CreditPerformanceMonitorInstaller() 
    { 
     this.counterInstaller_ = new PerformanceCounterInstaller(); 
     this.counterInstaller_.CategoryName = CreditPerformanceCounter.CategoryName; 
     this.counterInstaller_.CategoryType = PerformanceCounterCategoryType.SingleInstance; 

     CounterCreationData transferAverageData = new CounterCreationData(); 
     transferAverageData.CounterName = CreditPerformanceCounter.AverageTransferTimeCounterName; 
     transferAverageData.CounterHelp = "Reports the average execution time of transfer operations"; 
     transferAverageData.CounterType = PerformanceCounterType.AverageTimer32; 
     this.counterInstaller_.Counters.Add(transferAverageData); 

     CounterCreationData transferAverageBaseData = new CounterCreationData(); 
     transferAverageBaseData.CounterName = CreditPerformanceCounter.AverageTransferTimeBaseCounterName; 
     transferAverageBaseData.CounterHelp = "Base for average transfer time counter"; 
     transferAverageBaseData.CounterType = PerformanceCounterType.AverageBase; 
     this.counterInstaller_.Counters.Add(transferAverageBaseData); 

     this.Installers.Add(this.counterInstaller_); 
    } 

    public Installer PerformanceCounterInstaller 
    { 
     get { return this.counterInstaller_; } 
    } 
} 

di scrivere al contatore delle prestazioni, si può fare in questo modo:

public void RecordTransfer(long elapsedTicks) 
{ 
    using (PerformanceCounter averageTransferTimeCounter = new PerformanceCounter(), 
     averageTransferTimeBaseCounter = new PerformanceCounter()) 
    { 
     averageTransferTimeCounter.CategoryName = CreditPerformanceCounter.CategoryName; 
     averageTransferTimeCounter.CounterName = CreditPerformanceCounter.AverageTransferTimeCounterName; 
     averageTransferTimeCounter.ReadOnly = false; 

     averageTransferTimeBaseCounter.CategoryName = CreditPerformanceCounter.CategoryName; 
     averageTransferTimeBaseCounter.CounterName = CreditPerformanceCounter.AverageTransferTimeBaseCounterName; 
     averageTransferTimeBaseCounter.ReadOnly = false; 

     averageTransferTimeCounter.IncrementBy(elapsedTicks); 
     averageTransferTimeBaseCounter.Increment(); 
    } 
} 
4

Dai uno sguardo ai diversi PerformanceCounterTypes. Esistono diversi tipi per il calcolo del tempo medio o del conteggio. Troverete anche alcuni esempi.

Spero che questo aiuti.

Problemi correlati