J'ai une application de vérification de compteur, qui surveille PerformanceCounters [PC] à partir de .Net.PerformanceCounters: comportement incorrect non identifié
J'utilise un wrapper de classe pour le PC pour permettre l'accès synchronisé etc. Le CounterWrapper a une méthode Init, où le code suivant est exécuté:
PerformanceCounterCategory pcc = new PerformanceCounterCategory(this.categoryName, this.machineName);
if(pcc.CounterExists(this.counterName))
{
if(this.pc != null) //Could exist from earlier use.
{
try
{
this.pc.Close();
this.pc.Dispose();
}
catch(Exception ex)
{
...log
}
}
this.pc = new PerformanceCounter(this.categoryName, this.counterName, this.instanceName, this.machineName);
float value = pc.NextValue(); //Initial read//////-----MARK-----.
}
Ce code fonctionne bien initial.
Après l'un des ordinateurs regardé va en ligne - c'est inscrit dans la méthode de mise à jour - le code ci-dessus ne fonctionne plus et pour tester la disponibilité à distance de ce compteur, le méthode ci-dessus « Init » est appelé à nouveau. Parfois, cela fonctionne, parfois cela échoue. Si elle échoue, je vois:
InvalidOperation; Message: Impossible d'accéder à une clé de registre fermée. Nom de l'objet: 'HKEY_PERFORMANCE_DATA'., Source: mscorlib
Ceci est à la position MARKed dans le code ci-dessus.
J'attendais le code à l'échec ici:
PerformanceCounterCategory pcc = new PerformanceCounterCategory(this.categoryName, this.machineName);
if(pcc.CounterExists(this.counterName))
ou ici:
this.pc = new PerformanceCounter(this.categoryName, this.counterName, this.instanceName, this.machineName);
Mais pas dans "Init" à "value = this.pc.NetxtValue" [Marked pos ]
Il semble y avoir quelque chose d'étrange dans le framework [et ce n'est pas la première fois, je vois quelque chose d'étrange avec ça à PerformanceCounters].
Toute aide serait géniale!
Merci à ce jour et meilleures salutations,
++ MABRA
Oh, mes propres pieds, je vois :-(Merci beaucoup! – mabra
Ne peut pas être, il obtient new-ed une ligne au-dessus. –
pcc fait, mais pas pc, pour autant que Je peux dire. –