Используя .NET 4.7, справочный источник можно найти здесь. Согласно документации, конструктор public PerformanceCounter (string categoryName, string counterName, string instanceName, bool readOnly); должен генерировать исключение InvalidOperationException, если counterName не существует.

Но, как вы можете видеть из источника, эта проверка выполняется только в том случае, если счетчик доступен только для чтения. Например, это нормально возвращается:

new PerformanceCounter("ExistingCategory","NameDefinitelyDoesntExist", "ExistingInstance, false)`

Итак, столкнусь ли я с исключительной ситуацией во время выполнения позже? В противном случае я предполагаю, что пока счетчик доступен для записи и существует имя категории, соответствующий счетчик производительности не обязательно должен существовать на локальном компьютере.

Я хочу сделать это только для того, чтобы написать код с использованием счетчика производительности, который будет работать на множестве машин, не выполняя рутинную работу по проверке наличия счетчика на каждой машине.

0
Elliott Beach 4 Мар 2019 в 16:39

1 ответ

Лучший ответ

Что ж, мне кажется, вы всегда можете прочитать данные из счетчика PerformanceCounter с возможностью записи, поэтому разница в поведении странная. Документы здесь определенно неверны.

Похоже, .NET пытается изобразить вашу прихоть, как InvalidOperationException будет выдан при вызове NextValue(), метода для чтения из счетчика производительности, независимо от того, читается он или нет - Только. Для счетчика производительности, доступного только для чтения, это один из немногих методов, которые вы хотели бы вызвать, и .NET просто вызовет исключение раньше, чем позже.

Кроме того, похоже, что запись в счетчик производительности (через RawValue, IncrementBy, Decrement и т. Д.) Будет успешной независимо от того, существует ли соответствующий счетчик Windows на самом деле. , как предложил наш звездный гость Ганс Пассан.

0
Warlike Chimpanzee 4 Мар 2019 в 17:41