【问题标题】:Measure CPU and RAM Usage of Child Process测量子进程的 CPU 和 RAM 使用率
【发布时间】:2013-03-05 11:46:50
【问题描述】:

我有以下流程:

public void Run()
        {

            ProcessStartInfo serverPInfo = new ProcessStartInfo("javaw", "-jar -Xms1024M -Xmx1024M \"C:\\Users\\David\\Documents\\Visual Studio 2012\\Projects\\ConsoleApplication8\\Debug\\craftbukkit.jar\" -o true -nojline");
            serverPInfo.RedirectStandardInput = true;
            serverPInfo.RedirectStandardOutput = true;
            serverPInfo.RedirectStandardError = true;
            serverPInfo.UseShellExecute = false;


            serverP = new Process();
            serverP.StartInfo = serverPInfo;

            serverP.OutputDataReceived += new DataReceivedEventHandler(ServerOutputDataReceived);
            serverP.ErrorDataReceived += new DataReceivedEventHandler(ServerErrorDataReceived);
            serverP.Start();


            serverP.BeginOutputReadLine();
            serverP.BeginErrorReadLine();
            serverP.WaitForExit();
        }

如何测量进程的 CPU 和 RAM 使用率?

我尝试了serverP.WorkingSet64serverP.PrivateMemorySize64serverP.PagedMemorySize64,但它们都返回常量值。它们都没有改变(比如任务管理器中的 RAM 使用量表)。

我不知道如何获取当前的 CPU 使用率。

我在互联网上查看过,但我找到的大部分内容都是PerformanceMonitor。我不想使用它,因为可能有更多“javaw”进程的实例,我只想测量我在上面的代码中创建的子进程的 CPU 和 RAM 使用情况。

任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试在每次想要获取 RAM 时从 PID 获取新的 Process 对象?
  • @ZoolWay 我不知道该怎么做。你能告诉我怎么做或者它是怎么叫的,以便我可以谷歌它吗?

标签: c# process cpu ram child-process


【解决方案1】:

您可以使用PerformanceCounter 仅测量子进程活动。但是您需要使用它的进程 ID 而不是进程名称。计数器的RawValue 等于ProcessId,当您创建它时。

Here is an answer describing such technique.

【讨论】:

    【解决方案2】:

    没有“当前 CPU 使用率”之类的东西。它只能针对某个时间段进行测量,例如最后 1 秒。您可以使用 TotalProcessorTime 属性,每秒测量一次并减去前一个值。这将为您提供上次测量期间 CPU 的使用时间。
    为了测量 RAM 使用情况,我使用了 WorkingSet64 和 PrivateMemorySize64 - 这对我来说效果很好。

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多