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

问题描述 投票:0回答:1

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

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

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

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

我想这样做,所以我可以使用性能计数器编写一些代码,该计数器将在很多机器上运行,而不会经历苦差事,确保计数器存在于每台机器上。

.net performancecounter
1个回答
0
投票

好吧,你可以随时从可写的PerformanceCounter中读取,因此行为的差异很奇怪。这里的文档肯定是不正确的。

will be thrown(从性能计数器读取的方法)被调用时,看起来.NET正试图反对你的异想天开,作为InvalidOperationException NextValue(),无论它是否是只读的。对于只读性能计数器,这是您希望调用的唯一方法之一,.NET将简单地抛出异常而不是更晚。

此外,正如我们的名人客人Hans Passant所建议的那样,无论相应的Windows计数器是否确实存在,写入性能计数器(通过RawValueIncrementByDecrement等)都会成功。

© www.soinside.com 2019 - 2024. All rights reserved.