Performance Counters non visualizzati in Performance Monitor

Non molto tempo fa, trovandomi a dover aggiungere e utilizzare dei performance counter (contatori di prestazioni) in un’applicazione .NET (Framework 3.5) a cui stavo lavorando, mi sono imbattutto in un curioso problema.   

In pratica, ho aggiunto all’applicazione la possibilità, durante l’esecuzione, di creare e aggiornare alcuni performance counters, che però non venivano visualizzati nell’applicazione di sistema “Performance Monitor” (perfmon, “Prestazioni” su XP in Italiano).   

Ho provato anche con un’applicazione di esempio trovato in rete (http://perfmoncounterhelper.codeplex.com/), che ho scoperto non essere molto differente dalla mia implementazione, ma il risultato era sempre lo stesso: i contatori sono creati; posso verificarne l’esistenza col tool Server Explorer di Visual Studio, ma non è possibile utilizzarli in performance monitor, in quanto la combo “Oggetto prestazione” non presenta i contatori installati dalla mia applicazione.   

Preso dallo sconforto, ho fatto installare l’applicazione di test e i relativi contatori a due miei colleghi sui loro PC: su un sistema i contatori erano visualizzati; sull’altro no.   

A questo punto è subito sorto il dubbio sulla lingua di sistema: infatti l’unico sistema su cui i contatori erano visibili era quello in Inglese, mentre nei due sistemi in Italiano non erano visibili.   

Ho quindi indagato e poco dopo ho scoperto che sul registry di Windows i contatori sono memorizzati in
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib   

Fig. 1: Informazioni sui contatori di prestazioni nel registry di Windows.

Sul mio sistema sono presenti due sottochiavi:   

  • 009”, che ho scoperto contenere le informazioni sui contatori in Inglese (US);
  • 010”, che ho scoperto contenere le informazioni sui contatori in Italiano.
Fig. 2: Contatori in Inglese (Americano) nel registry di Windows.
Fig. 3: Contatori in Italiano nel registry di Windows.

Il problema consiste quindi nel fatto che, all’installazione dei nuovi contatori, essi sono aggunti alla chiave “009” (Inglese), mentre perfmon permette di visualizzare i contatori in Italiano, le cui informazioni si trovano alla chiave “010”.

Finalmente, ho risolto copiando con regedit il contenuto delle chiavi “Counter” e “Help” da “009” a “010”: così facendo in perfmon riesco a vedere i nuovi contatori, al costo (direi trascurabile) di avere tutti i nomi degli oggetti in Inglese.

Fig 4: I contatori in Italiano (prima della copia dei valori nel registry).
Fig. 5: I contatori in Inglese (dopo la copia dei valori nel registry)
Fig. 6: È finalmente possibile aggiungere il contatore in perfmon.
Fig. 7: È finalmente possibile monitorare il contatore in perfmon.

Ovviamente, se qualcuno fosse a conoscenza di un metodo per poter aggiungere da codice i contatori a un sistema Windows XP non in lingua Inglese (US) è caldamente invitato a lasciare un commento 🙂 🙂 🙂

Grazie per la lettura!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.