.NET(C#):获取进程的CPU使用状况

摘要:
第一个是通过手动的方法来计算CPU使用比例:CPU使用比例=在间隔时间内进程的CPU使用时间除以计算机逻辑CPU数量。Process.TotalProcessorTime则代表两者之和。唯一需要注意的地方是:改性能计数器的返回值没有考虑到多核(多个)CPU的情况,所以计算结果应该除以CPU数量!

第一个是通过手动的方法来计算CPU使用比例:CPU使用比例 = 在间隔时间内进程的CPU使用时间 除以 计算机逻辑CPU数量

使用Process类的UserProcessorTime和PrivilegedProcessorTime属性可以返回当前进程所耗费CPU的用户和内核时间。Process.TotalProcessorTime则代表两者之和。它们都返回TimeSpan结构体对象。

代码:

//+ using System.Diagnostics

//+ using System.Threading

staticvoidUsingProcess(stringpname)

{

using(varpro=Process.GetProcessesByName(pname)[0])

{

//间隔时间(毫秒)

intinterval=1000;

//上次记录的CPU时间

varprevCpuTime=TimeSpan.Zero;

while(true)

{

//当前时间

varcurTime=pro.TotalProcessorTime;

//间隔时间内的CPU运行时间除以逻辑CPU数量

varvalue=(curTime-prevCpuTime).TotalMilliseconds/interval/Environment.ProcessorCount*100;

prevCpuTime=curTime;

//输出

Console.WriteLine(value);

Thread.Sleep(interval);

}

}

}

注意:

经测试上述方法同下面方法一样结果都比较准确,而且上面的方法更快(考虑到下面性能计数器的使用,尤其是多个重复进程名称在性能计数器中的处理),而上面方法可以直接用进程ID(PID)查询,因为用的是Process类,这是性能计数器不能快速做到的。

但是,上面的方法仅有一个缺点,当监控某些系统进程时可能会抛出Win32Exception异常指示“访问被拒绝”(即便是你已经使用管理员账户来运行程序)。

第二个是用性能计数器(PerformanceCounter)来监控,这个有现成的性能计数器专门做这个工作,可以直接参考控制面板中性能监控里的Process类的% Processor Time性能计数器。

唯一需要注意的地方是:改性能计数器的返回值没有考虑到多核(多个)CPU的情况,所以计算结果应该除以CPU数量!

代码:

staticvoidUsingPerfmon(stringpname)

{

//创建性能计数器

using(varp1=newPerformanceCounter("Process","% Processor Time", pname))

{

while(true)

{

//注意除以CPU数量

Console.WriteLine(p1.NextValue()/Environment.ProcessorCount);

Thread.Sleep(1000);

}

}

}

直接调用方法(需要指定一个进程名称)就可以每个一段时间输出改进程的CPU使用百分比:

比如看看Windows任务管理器的CPU使用率:

//或者UsingPerfmon("taskmgr");

UsingProcess("taskmgr");

来源:http://www.cnblogs.com/mgen/archive/2011/11/12/2246116.html

免责声明:文章转载自《.NET(C#):获取进程的CPU使用状况》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇fastreport对象的属性和方法Fiddler安装及证书配置教程(Windows)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

TOPAS 命令详解

TOPAS命令详解Topas命令可以监控系统活动――memory,I/O,paging space,cpu,process。此命令包含在perfagent.tools文件集里面。命令使用方法:topas [ -d number_of_monitored_hot_disks ] [ -h ][ -i monitoring_interval_in_second...

【华为云技术分享】Linux内核发展史 (1)

openEuler是基于Linux 内核的企业级Linux 服务器操作系统平台的开源社区发行版。openEuler支持鲲鹏架构,可运行在TaiShan服务器上。本技术连载将会从理论基础、源码分析和实操方法三个方面来比较全面地介绍内核编程与应用编程的基础知识,到2020年8月之前主要介绍内核编程部分。通过本连载的介绍,您将对openEuler内核编程和应用编...

c# 打印 主板信息CPU信息

Win32_Processor CPU 参数说明:AddressWidth --在32位操作系统,该值是32,在64位操作系统是64。Architecture --所使用的平台的处理器架构。AssetTag --代表该处理器的资产标签。Availability --设备的状态。Caption --设备的简短描述Characteristics --处理器支持...

零拷贝

零拷贝(Zero-copy)技术指在计算机执行操作时,CPU 不需要先将数据从一个内存区域复制到另一个内存区域,从而可以减少上下文切换以及 CPU 的拷贝时间。它的作用是在数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现 CPU 的零参与,彻底消除 CPU 在这方面的负载。实现零拷贝用到的最主要技术是 DMA 数据传输技术...

linux 查看系统资源使用信息的一些命令集合

linux上的进程查看及管理工具: pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup,nice,renice,killall。。。 linux开机时,会启动第一个进程,由这个进程去启动别的进程,这个第一个进程在centos5,6,7上实现的...

c++ windows下计时

多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间 陈硕Blog.csdn.net/Solstice 自从 Intel Pentium 加入 RDTSC 指令以来,这条指令是 micro-benchmarking 的利器,可以以极小的代价获得高精度的 CPU 时钟周期数(Time Stamp Counter),不少介绍优化的文章[1]和书籍用...