【问题标题】:Get % Processor Time in Mono在 Mono 中获取 % 处理器时间
【发布时间】:2015-03-17 05:57:09
【问题描述】:

我正在开展一个需要监控正在使用的 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。

我试过谷歌搜索,但似乎没有任何效果。

想法?

【问题讨论】:

  • 我们遇到了类似的问题。我们必须在目标 C 中运行代码才能完成。您可以在此处查看详细信息 -> stackoverflow.com/questions/11460184/…
  • 这篇文章对理解cpus是如何工作的很有帮助,但是你有什么关于你是如何在objective c中实现它的指针吗?我试图自己实现一个目标 c 计数器,但没有成功。
  • 我的回答对你有用吗?我已经在我的答案中添加了代码。

标签: c# macos mono performancecounter


【解决方案1】:

我们遇到了类似的问题。我们解决它的方法是编写脚本。我将分享脚本中的代码。以及我们从 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}'

【讨论】:

  • 抱歉,我花了几天时间才解决这个问题。我尝试了这个解决方案 - 我正在尝试获取整台机器的整体 cpu 使用率。有时值超过 100%。知道为什么会发生这种情况,您是否在您的应用中做了任何事情来处理这个问题?
  • @mccow002 - 我们只监控应用程序使用的 CPU。因此,我们没有遇到您面临的问题,即价值超过 100%。你的mac是多核的吗?根据这个线程(forums.macrumors.com/showthread.php?t=1186691),i7 mac 上的进程可能高达 760%-800%。
  • 那么你只需从 shell 脚本中获取数字,然后将其除以内核数,对吧?
  • 太棒了。接受的答案
猜你喜欢
  • 2020-05-25
  • 2021-09-22
  • 2011-12-16
  • 1970-01-01
  • 2013-12-17
  • 2021-01-16
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多