可写性能计数器不会引发异常

时间:2019-03-04 13:39:05

标签: .net performancecounter

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

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

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

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

我只是想这样做,所以我可以使用性能计数器编写一些代码,该性能计数器可以在许多计算机上运行,​​而不必费力确保计数器存在于每台计算机上。

1 个答案:

答案 0 :(得分:0)

好吧,您始终可以从可写的PerformanceCounter中读取内容,因此行为上的差异很奇怪。这些文档在这里肯定是不正确的。

当调用NextValue()(一种从性能计数器读取的方法)时,无论它是否是只读的,.NET似乎都在试图掩饰您的想法,作为InvalidOperationException will be thrown。对于只读性能计数器,这是您希望调用的唯一方法之一,.NET只会在不久而不是稍后抛出该异常。

此外,无论相应的Windows是否成功(通过RawValueIncrementByDecrement等)对性能计数器进行写入似乎都将成功正如我们的名人嘉宾汉斯·帕桑特(Hans Passant)所建议的那样,柜台确实存在。