从性能计数器获得零

时间:2013-07-20 07:17:35

标签: c# wcf wmi performancecounter

请参阅以下代码:

    PerformanceCounter total_cpu = new PerformanceCounter("Process", "% Processor Time", "_Total");
    return total_cpu.NextValue();
    //returns 0

返回0

现在,请看这个:

    PerformanceCounter total_cpu = new PerformanceCounter("Process", "% Processor Time", "_Total");
    while (true)
    {
        float t = total_cpu.NextValue();
        System.Threading.Thread.Sleep(1000);
        return t;
        //returns correct value (matched with Task Manager)
    }

我希望每2秒通过WCF服务连续获取性能计数器值(例如CPU使用率),并使用ajax在asp页面上显示Result。

现在问题是正确的方法也会为自己创建一个循环。我试图通过旗帜处理它,但没有帮助。

注意:我也尝试了 WMI ,但没有返回正确的值。

谢谢

1 个答案:

答案 0 :(得分:1)

对于许多计数器,第一个值始终为0.请参阅文档的“备注”部分中的第一个注释: http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.nextvalue.aspx

你应该做的是让计数器的静态实例在后台每两秒读一次,将数据存储在你的服务可以获得它的地方。每次请求时,您都可以返回预取值而不是每次从计数器中取出。