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

方法获取特定进程的 中央处理器内存使用情况。NET PerformanceCounter类? ?还有

Processor\% Processor TimeProcess\% Processor Time

我有点搞不清楚这两者之间的关系。

134845 次浏览

来自 这个的邮件:

要获得整个 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 TimeProcess\% Processor Time之间的差异是 Processor是从 PC 本身和 Process是每个独立的过程。因此,处理器的处理时间将在 PC 机上使用。进程的处理器时间将是指定的进程使用情况。类别名称的完整描述: 性能监视器计数器

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

按照 文章的描述,使用 系统。诊断。处理。总处理时间系统。诊断。处理线程。总处理时间属性计算处理器使用量。

佩洛 Hyper-V:

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

获取与任务管理器中显示的值类似的值

PerformanceCounter total_cpu = new PerformanceCounter("Process", "% Processor Time", "_Total");
PerformanceCounter process_cpu = new PerformanceCounter("Process", "% Processor Time", Process.GetCurrentProcess().ProcessName);
Console.writeln (((process_cpu.NextValue()/( (Environment.ProcessorCount)* total_cpu.NextValue()))*100) )