获取进程的CPU和内存使用情况的正确性能计数器是什么?

时间:2011-01-13 12:24:21

标签: c# memory-management cpu-usage performancecounter

如何使用.NET PerformanceCounter类获取特定进程的 CPU 内存使用率?还有什么区别

Processor\% Processor TimeProcess\% Processor Time

我对这两者感到有些困惑。

2 个答案:

答案 0 :(得分:108)

来自this帖子:

获取整个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是您希望获取有关信息的进程名称。

请注意,工作集本身可能不足以确定流程的内存占用 - 请参阅What is private bytes, virtual bytes, working set?

要检索所有类别,请参阅Walkthrough: Retrieving Categories and Counters

Processor\% Processor TimeProcess\% Processor Time之间的差异Processor来自PC本身,Process是每个进程。因此,处理器的处理器时间将在PC上使用。进程的处理器时间将是指定的进程使用情况。有关类别名称的完整说明:Performance Monitor Counters

使用效果计数器的替代方法

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

答案 1 :(得分:4)

Pelo Hyper-V:

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