L'inizializzazione dei contatori delle prestazioni in .net è molto lenta

L'inizializzazione dei contatori delle prestazioni in .net è molto lenta

La soluzione per l'inizializzazione dei contatori delle prestazioni in .net è molto lenta
di seguito:

Al momento ho due PerformanceCounter s che stanno creando problemi quando la mia applicazione Windows Forms deve essere avviata.

Il PerformanceCounter I messaggi vengono creati nella classe designer di un UserControl che viene avviato all'avvio dell'applicazione. I contatori, chiamati performanceCounterMemory e performanceCounterProTime , sono creati per poter fornire all'utente un feedback in tempo reale della memoria RAM attualmente utilizzata e del tempo di elaborazione (percentuale). Vengono creati con le seguenti righe nella classe designer

    this.performanceCounterMemory = new System.Diagnostics.PerformanceCounter();
    this.performanceCounterProTime = new System.Diagnostics.PerformanceCounter();

    ((System.ComponentModel.ISupportInitialize)(this.performanceCounterMemory)).BeginInit();
    ((System.ComponentModel.ISupportInitialize)(this.performanceCounterProTime)).BeginInit();

    this.performanceCounterMemory.CategoryName = "Memory";
    this.performanceCounterMemory.CounterName = "% used dedicated byte";
        
    this.performanceCounterProTime.CategoryName = "Processor";
    this.performanceCounterProTime.CounterName = "% Processor Time";
    this.performanceCounterProTime.InstanceName = "_Total";

    ((System.ComponentModel.ISupportInitialize)(this.performanceCounterMemory)).EndInit();
    ((System.ComponentModel.ISupportInitialize)(this.performanceCounterProTime)).EndInit();

Per motivi sconosciuti le chiamate alle ultime due linee, il EndInit() le chiamate, per entrambi i contatori sono molto lente (10+ secondi) rendendo l'avvio dell'applicazione molto lento.

Perchè è questo? Qual è lo scopo del EndInit chiama ed è possibile renderlo più veloce?

Per poter utilizzare i contatori i seguenti due riferimenti sono aggiunti dalle righe

using System.Management.Instrumentation;
using System.Management;

Il processore della macchina è:CPU Intel® Core™ i7-3770 a 3,40 GHz

long memory = GC.GetTotalMemory(true);

Puoi usare la seguente funzione (il parametro true dice a GC di compilare prima)
Questo è per la RAM, non capisco davvero, forse aiuterà)