C#从特定进程(性能计数器)获取CPU和RAM

C#从特定进程(性能计数器)获取CPU和RAM,c#,process,cpu,monitor,performancecounter,C#,Process,Cpu,Monitor,Performancecounter,我想检索前台进程(或特定进程)在该点的cpu和ram使用情况。 检索窗口的标题不是问题,这部分工作正常。但即使活动窗口以70%或更高的cpu运行,cpu显示仍保持在0% (int)pCPU.NextValue();// 不要直接使用该值,使用计算样本 CounterSample sample1 = pCPU.NextSample(); float value = CounterSample.Calculate(sample1); 如果您的计数器是“速率”型样品,则需要获取两个样品 Counte

我想检索前台进程(或特定进程)在该点的cpu和ram使用情况。 检索窗口的标题不是问题,这部分工作正常。但即使活动窗口以70%或更高的cpu运行,cpu显示仍保持在0%


(int)pCPU.NextValue();// 不要直接使用该值,使用计算样本

CounterSample sample1 = pCPU.NextSample();
float value = CounterSample.Calculate(sample1);
如果您的计数器是“速率”型样品,则需要获取两个样品

CounterSample sample1 = counter.NextSample();
Thread.Sleep(1000); // wait some time
CounterSample sample2 = counter.NextSample();
float value = CounterSample.Calculate(sample1, sample2);

你看到了吗?第一个样本不起作用。第二个示例给出了不同的cpu使用情况。我已经有另一个计数器测量总cpu负载(看起来很准确),其中一个计数器显示所有进程的50%,而这个计数器显示单个进程的60%。。。那不好。另外,不使用thread.sleep,而只在同一个周期中执行,而不必存储来自同一进程或其他地方的前一个反采样,这是不可能的吗?我的应用程序依赖于帧速率,不能像那样睡眠。如果进程在sleep()期间关闭,它也可能会崩溃。我在第二个示例上做了更多的测试,差异当然是由1秒延迟造成的。。我觉得自己很愚蠢。。但我是对的,当正在检查的进程在1秒钟内终止时(很有可能),这将使我的程序崩溃。
CounterSample sample1 = pCPU.NextSample();
float value = CounterSample.Calculate(sample1);
CounterSample sample1 = counter.NextSample();
Thread.Sleep(1000); // wait some time
CounterSample sample2 = counter.NextSample();
float value = CounterSample.Calculate(sample1, sample2);