以单声道获取处理器时间百分比

时间:2015-03-17 05:57:09

标签: c# macos mono performancecounter

我正在开发一个需要监控正在使用的cpu百分比的项目。它必须在Mac和Windows上,所以我使用的是Mono和Xamarin。

我用来获取此代码的代码是(这是一个测试,但计数器是相同的):

var cpuCounter = new PerformanceCounter
{
    CategoryName = "Processor",
    CounterName = "% Processor Time",
    InstanceName = "_Total"
};

cpuCounter.NextValue ();
Thread.Sleep (1000);

for (var i = 0; i < 50; i++) {
    Console.WriteLine (cpuCounter.NextValue());
    Thread.Sleep (1000);
}

在电脑上,这将返回任务管理器显示的内容。在Mac上,即使活动监视器显示不同,每次打勾也会返回100。

我尝试使用Google搜索,似乎没有任何效果。

想法?

1 个答案:

答案 0 :(得分:3)

我们遇到了类似的问题。我们解决它的方式是编写脚本。我将在脚本中共享代码。我们从Mono调用它的方式。

脚本(我们称之为getCPU.sh并将其保存在/ library / Application Support / UniqueApp)

#!/bin/bash
ps x -o pcpu,comm | grep UniqueApp

单声道代码 -

  var psi = new ProcessStartInfo("/bin/sh", "\"/Library/Application Support/UniqueApp/getCPU.sh\"")
                              {
                                  RedirectStandardOutput = true,
                                  UseShellExecute = false
                              };
                Process p = Process.Start(psi);
                string outString = p.StandardOutput.ReadToEnd();
                p.WaitForExit();
                outString = outString.Substring(0, 5).Trim()

outString将具有UniqueApp使用的CPU百分比

如果您想要整个机器的CPU百分比,请将getCPU.sh更改为具有以下代码 -

#!/bin/bash
ps x -o pcpu | tail -n+2| awk '{s+=$1} END {print s}'