我有以下过程:
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.WorkingSet64
,serverP.PrivateMemorySize64
和serverP.PagedMemorySize64
,但它们都返回了常量值。它们都没有改变(就像任务管理器中的RAM使用率计)。
我不知道如何获得当前的CPU使用率。
我在互联网上查看,但我找到的大部分内容都是PerformanceMonitor
。我不想使用它,因为可能有更多的“javaw”进程实例,我只想测量我在上面的代码中创建的子进程的CPU和RAM使用情况。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您可以使用PerformanceCounter
仅衡量子流程活动。但是您需要使用其Process ID而不是Process Name。当你创建它时,计数器的RawValue
等于ProcessId
。
答案 1 :(得分:0)
没有“当前CPU使用率”这样的事情。它只能在一段时间内测量,例如持续1秒。您可以使用TotalProcessorTime属性,每秒测量一次并减去之前的值。这将为您提供在上一个测量期间使用CPU的时间 为了测量RAM的使用情况,我正在使用WorkingSet64和PrivateMemorySize64 - 这对我很有用。