什么是正确的性能计数器,以获得一个进程的CPU和内存使用情况?

如何使用.net性能计数器类来获取特定进程的CPU内存使用情况 ? 还有什么区别

Processor\% Processor TimeProcess\% Processor Time

我在这两个之间有点困惑。

从这个职位:

要获取整个PC CPU和内存使用情况:

 using System.Diagnostics; 

然后在全球声明:

 private PerformanceCounter theCPUCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); 

然后为了获得CPU时间,只需调用NextValue()方法:

 this.theCPUCounter.NextValue(); 

这会让你的CPU使用率

至于内存使用情况,我也相信同样的事情:

 private PerformanceCounter theMemCounter = new PerformanceCounter("Memory", "Available MBytes"); 

然后为了获得内存使用,只需调用NextValue()方法:

 this.theMemCounter.NextValue(); 

对于特定的进程CPU和内存使用情况:

 private PerformanceCounter theCPUCounter = new PerformanceCounter("Process", "% Processor Time", Process.GetCurrentProcess().ProcessName); 

其中Process.GetCurrentProcess().ProcessName是您希望获取有关信息的进程名称。

 private PerformanceCounter theMemCounter = new PerformanceCounter("Process", "Working Set", Process.GetCurrentProcess().ProcessName); 

其中Process.GetCurrentProcess().ProcessName是您希望获取有关信息的进程名称。

请注意, 工作集本身可能不足以确定进程的内存占用 – 请参阅什么是专用字节,虚拟字节,工作集?

要检索所有类别,请参阅演练:检索类别和计数器

Processor\% Processor TimeProcessor\% Processor Time之间的差异在于Processor\% Processor Time来自PC本身, Processor是单个进程。 所以处理器的处理器时间将在PC上使用。 进程的处理器时间将是指定的进程使用情况。 有关类别名称的完整说明: 性能监视器计数器

使用性能计数器的替代方法

使用System.Diagnostics.Process.TotalProcessorTime和System.Diagnostics.ProcessThread.TotalProcessorTime属性来计算您的处理器使用情况,如本文所述。

Pelo Hyper-V:

 private PerformanceCounter theMemCounter = new PerformanceCounter( "Hyper-v Dynamic Memory VM", "Physical Memory", Process.GetCurrentProcess().ProcessName);