У меня есть приложение для проверки счетчиков, которое контролирует PerformanceCounters [PC] из .Net.
Я использую класс-оболочку для ПК, чтобы разрешить синхронизированный доступ и т. Д.
CounterWrapper имеет метод Init, в котором выполняется следующий код:
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-----.
}
Этот код изначально хорошо работает.
После того, как один из отслеживаемых компьютеров переходит в автономный режим - это регистрируется в методе обновления -
приведенный выше код больше не работает и для проверки удаленной доступности этого счетчика, выше
Метод Init снова вызывается. Иногда это работает, иногда это не удается. Если это не удается, я вижу:
InvalidOperation; Сообщение: невозможно получить доступ к закрытому разделу реестра.
Имя объекта: 'HKEY_PERFORMANCE_DATA'., Источник: mscorlib
Это находится в ОТМЕТЕННОЙ позиции в коде выше.
Я ожидал, что здесь произойдет сбой кода:
PerformanceCounterCategory pcc = new PerformanceCounterCategory(this.categoryName, this.machineName);
if(pcc.CounterExists(this.counterName))
или здесь:
this.pc = new PerformanceCounter(this.categoryName, this.counterName, this.instanceName, this.machineName);
Но не в "Init" в "value = this.pc.NetxtValue" [ОТПРАВЛЕННОЕ ПОЛОЖЕНИЕ]
Кажется, что-то странное в фреймворке [и это не первый раз, я вижу что-то странное в PerformanceCounters].
Любая помощь будет отличной!
Спасибо, пока
С наилучшими пожеланиями,
++ mabra