Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于PerformanceCounter,是否有统一的方法来计算任何类别内的计数器?_C#_Performancecounter - Fatal编程技术网

C# 对于PerformanceCounter,是否有统一的方法来计算任何类别内的计数器?

C# 对于PerformanceCounter,是否有统一的方法来计算任何类别内的计数器?,c#,performancecounter,C#,Performancecounter,我使用C的PerformanceCounter类计算内存类别下2个可用字节和%已提交字节的可用计数器 PerformanceCounter pc = new PerformanceCounter("Memory", "Available Bytes", true); PerformanceCounter pc1 = new PerformanceCounter("Memory", "% Committed Bytes In Use", true);

我使用C的PerformanceCounter类计算内存类别下2个可用字节和%已提交字节的可用计数器

            PerformanceCounter pc = new PerformanceCounter("Memory", "Available Bytes", true);
        PerformanceCounter pc1 = new PerformanceCounter("Memory", "% Committed Bytes In Use", true);

        var a = pc.RawValue;
        var b = pc1.NextValue();
我在这里看到的问题是,RawValue用于可用字节计数器,而NextValue用于%已提交的已使用字节计数器


是否有统一的方法来计算这两个或所有计数器?

根据我的经验,主要是MSDN文档,它根据性能计数器类别而变化,然后根据特定的属性属性(例如,在您的情况下可用的字节数或提交的百分比)而变化

您要寻找的可能是下一个示例

属性:RawValue

获取或设置此计数器的原始值或未计算的值

^这意味着它不一定取决于创建它的开发人员

方法:NextValue

获取计数器样本并返回其计算值

^这意味着它取决于创建它的开发人员

方法:NextSample

获取计数器样本,并返回其原始或未计算的值

这也是很久以前向我解释过的,所以恕我直言,原始价值的概念并不总是有效的

原始值用于创建样本。NextSample或samples是一段时间内原始值的平均值,更真实。NextValue根据值的上下文和开发人员的实现,将清理后的示例转换为%,或从字节转换为千字节


因此,我的拙见是,即使信息已经超过10年了,也应该放弃使用RawValue,转而使用NextSample——如果您需要一个真实/准确的值。

它只会因类别而异,因为不同类别包含不同的计数器类型。该属性定义计数器保存的数据类型,以及如何计算数据。对于测量时间差的计数器来说,原始值中存在差异是没有意义的,因为对于想要进行测量的不同客户来说,差异可能在不同的时间段内存在。有关不同类型的更多信息,请参阅。如果您真的想深入了解每种类型的工作原理,您必须求助于所有这些都基于的Win32文档。以前只有一页写着所有这些,但我现在很难找到。我能找到的最接近的是这里:。某些性能计数器类型使用一个主计数器和一个基计数器,然后使用一个基于每个计数器的当前和以前的原始值以及可能的系统时间的公式来计算下一个值。RawValue对于某些计数器类型可能无效,因为以与计算值相同的方式解释它是没有意义的。例如,对于进程使用的%CPU的IIRC,原始值是自程序启动以来使用的CPU计时数,如果将其解释为百分比,则是无意义的。它只有在与以前的值和经过的时间进行比较时才有意义,从中还可以推断出可能的最大变化

对某些计数器使用RawValue是有意义的,而对其他计数器则没有意义。但是,NextValue在您第一次调用它时通常无法返回有意义的值,因为当它被计算为样本之间的差异时,您没有以前的样本可与之进行比较。您可以忽略这一点,也可以将代码设置为在启动期间调用它一次,以便后续调用获得实际值。请记住,NextValue应该在计时器上调用。例如,如果您在Network Bytes Sent计数器上调用它,它将返回上一次调用和本次调用之间发送的字节数。例如,如果您在初次呼叫后2秒调用网络字节发送计数器上的NextValue,然后在2分钟后再次调用,您将获得非常不同的值,即使网络传输是稳定的,因为2秒后的调用返回2秒内传输的字节数,2分钟后的呼叫将返回2分钟内传输的字节数

因此,简而言之,您可以对所有计数器类型使用NextValue,但必须丢弃或忽略返回的第一个值,并且必须在固定的时间间隔内调用NextValue,以使结果像交互式Windows性能监视器程序一样有意义