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
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.
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.
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!