本篇文章主要介绍详解C#获取特定进程CPU和内存使用率,非常具有实用价值,需要的朋友可以参考下。
正文
详解C#获取特定进程CPU和内存使用率
首先是获取特定进程对象,可以使用Process.GetProcesses()方法来获取系统中运行的所有进程,或者使用Process.GetCurrentProcess()方法来获取当前程序所对应的进程对象。当有了进程对象后,可以通过进程对象名称来创建PerformanceCounter类型对象,通过设定PerformanceCounter构造函数的参数实现获取特定进程的CPU和内存使用情况。
具体实例代码如下:
首先是获取本机中所有进程对象,分别输出某一时刻各个进程的内存使用情况:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Threading; namespace CSharpPerformance { //该程序可以实时监控所有进程或者指定进程的工作集、私有工作集 class Program { static void Main( string [] args) { //新建一个Stopwatch变量用来统计程序运行时间 Stopwatch watch = Stopwatch.StartNew(); //获取本机运行的所有进程ID和进程名,并输出哥进程所使用的工作集和私有工作集 foreach (Process ps in Process.GetProcesses()) { PerformanceCounter pf1 = new PerformanceCounter( "Process" , "Working Set - Private" , ps.ProcessName); PerformanceCounter pf2 = new PerformanceCounter( "Process" , "Working Set" , ps.ProcessName); Console.WriteLine( "{0}:{1} {2:N}KB" , ps.ProcessName, "工作集(进程类)" , ps.WorkingSet64 / 1024); Console.WriteLine( "{0}:{1} {2:N}KB" , ps.ProcessName, "工作集 " , pf2.NextValue() / 1024); //私有工作集 Console.WriteLine( "{0}:{1} {2:N}KB" , ps.ProcessName, "私有工作集 " , pf1.NextValue() / 1024); } watch.Stop(); Console.WriteLine(watch.Elapsed); Console.ReadLine(); } } } |
其中,工作集ps.WorkingSet64是静态的,pf2.NextValue()是动态变化的,工作集包含进程运行时其独占的内存和与其他进程共享的内存的和,而私有工作集是只包含进程独占的内存。
下面一组代码可以动态显示本程序所对应的进程的CPU和内存使用率的变化:
首先是SystemInfo.cs类:
发表评论