2013-03-16 54 views
1

的内存使用,我有以下过程:测量CPU和子进程

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和内存使用情况?

我试过serverP.WorkingSet64,serverP.PrivateMemorySize64serverP.PagedMemorySize64,但它们都返回常量值。它们都不会改变(如任务管理器中的RAM使用量度表)。

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

我在网上看了一下,但是我发现的大部分东西都是PerformanceMonitor。我不想使用它,因为可能会有更多的“javaw”进程实例,我只想测量我在上面的代码中创建的子进程的CPU和RAM使用情况。

任何帮助,将不胜感激。

+0

您是否曾尝试从每次想要获取内存的PID中获取新的'Process'对象? – ZoolWay 2013-03-16 21:39:34

+0

@ZoolWay我不知道该怎么做。你能告诉我该怎么做,或者它叫什么名字,以便我可以Google? – davidwroxy 2013-03-16 21:43:06

回答

0

有没有这样的事 “当前CPU使用率”。它只能在一段时间内测量,例如持续1秒。您可以使用TotalProcessorTime属性,每秒测量一次并减去以前的值。这会给你在最后一次测量期间使用CPU多少时间。
要测量RAM使用情况,我正在使用WorkingSet64和PrivateMemorySize64 - 这对我很好。