使用.NET 4.7,参考源here。根据文档,如果counterName不存在,则构造函数public PerformanceCounter (string categoryName, string counterName, string instanceName, bool readOnly);
应该抛出InvalidOperationException。
但是,正如您从源代码中看到的那样,它仅会检查计数器是否为只读。例如,这返回就好了:
new PerformanceCounter("ExistingCategory","NameDefinitelyDoesntExist", "ExistingInstance, false)`
那么,以后我会遇到运行时异常吗?否则,我假设只要计数器是可写的并且类别名称存在,则相应的性能计数器实际上就不需要在本地计算机上存在。
我只是想这样做,所以我可以使用性能计数器编写一些代码,该性能计数器可以在许多计算机上运行,而不必费力确保计数器存在于每台计算机上。
答案 0 :(得分:0)
好吧,您始终可以从可写的PerformanceCounter中读取内容,因此行为上的差异很奇怪。这些文档在这里肯定是不正确的。
当调用NextValue()
(一种从性能计数器读取的方法)时,无论它是否是只读的,.NET似乎都在试图掩饰您的想法,作为InvalidOperationException will be thrown。对于只读性能计数器,这是您希望调用的唯一方法之一,.NET只会在不久而不是稍后抛出该异常。
此外,无论相应的Windows是否成功(通过RawValue
,IncrementBy
,Decrement
等)对性能计数器进行写入似乎都将成功正如我们的名人嘉宾汉斯·帕桑特(Hans Passant)所建议的那样,柜台确实存在。