都知道可以在任务管理器中查看进程的 CPU 和内存占用,那么如何通过 .NET 编写代码的方式来获取到 CPU 和内存占用呢?
.NET 中提供了PerformanceCounter 类型,可以用来监视系统中大量的性能问题。
获取全局 CPU 和内存占用
要获取到全系统中的 CPU 占用率,获取全系统中内存占用,需要首先分别创建这两者的性能计数器:
// 创建对 CPU 占用百分比的性能计数器。varcpuCounter =newPerformanceCounter("Processor","% Processor Time","_Total");// 创建内存占用字节数的性能计数器varramCounter =newPerformanceCounter("Memory","Available MBytes");
接下来,使用NextValue() 可分别获取到两者的值:
floatcpu = CpuCounter.NextValue();floatram = RamCounter.NextValue();
你需要注意的是,我们在创建PerformanceCounter 时,构造函数中传入的参数是固定的,或者说必须跟当前系统中安装的计数器的计数器类别的名称(categoryName ,第一个参数)和计数器的名称(counterName ,第二个参数)对应。另外,如果某个类别包含单个实例,那么需要传入实例名称(instanceName ,第三个参数)。
获取当前进程的 CPU 和内存占用
在了解的PerformanceCounter 各个参数代表的含义之后,我们还可以获取到单个进程的性能计数。
varname = Process.GetCurrentProcess().ProcessName;varcpuCounter =newPerformanceCounter("Process","% Processor Time", name);varramCounter =newPerformanceCounter("Process","Working Set", name);
也是使用NextValue() 来获取到此性能计数器实例的值。
这里,我们在计算单个进程的内存占用时,使用的是工作集大小,这个值会比较接近我们平时使用任务管理器看到的物理内存占用的大小,但是我们还有其他可以查询的类别:
Private BytesWorkingSetVirtualBytes
如果有想学习编程的初学者,可来我们的C/C++技术学习扣qun的哦:58,934,83-89里面免费送整套系统的C/C++教程!
网友评论