0

请看下面的代码:

    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 页面上。

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

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

谢谢

4

1 回答 1

1

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

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

于 2013-07-20T22:15:59.873 回答