可写性能计数器不会抛出异常

Writable Performance Counter doesn't throw exception

使用 .NET 4.7,参考来源 here。根据文档,如果 counterName 不存在,构造函数 public PerformanceCounter (string categoryName, string counterName, string instanceName, bool readOnly); 应该抛出 InvalidOperationException。

但是正如您从源代码中看到的那样,它只检查计数器是否为只读。比如这个returns就好了:

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

那么,我以后会 运行 进入 运行 时间异常吗?否则我假设只要计数器是可写的并且类别名称存在,相应的性能计数器就不需要实际存在于本地机器上。

我想这样做只是为了我可以使用性能计数器编写一些代码,这些代码将 运行 在很多机器上运行,而无需经历确保计数器存在于每台机器上的苦差事。

好吧,我认为您始终可以从可写的 PerformanceCounter 读取数据,因此行为上的差异很奇怪。这里的文档肯定是不正确的。

看起来 .NET 正试图预测您的突发奇想,作为 InvalidOperationException will be thrownNextValue() 调用从性能计数器读取的方法时,无论它是否被读取-只要。对于只读性能计数器,这是您希望调用的唯一方法之一,并且 .NET 会尽早抛出异常。

此外,写入 到性能计数器(通过 RawValueIncrementByDecrement 等)似乎会成功正如我们的名人嘉宾 Hans Passant 所建议的那样,相应的 Windows 计数器是否实际存在。