详解C#获取特定进程CPU和内存使用率
想要获取特定进程的CPU和内存使用率,我们可以使用C#语言结合System.Diagnostics命名空间提供的相关API来实现。
步骤一:获取特定进程
首先我们需要获取我们想要获取的那个进程的实例,可以采用以下方法:
Process process = Process.GetProcessesByName("进程名")[0];
其中, "进程名"
是所要获取的进程的名称。这里假设要获取的进程在当前系统上只有一个,如果有多个,可以通过遍历Process.GetProcessesByName("进程名")
的返回值来确定具体用哪个。
步骤二:获取进程CPU占用率
接下来我们将使用PerformanceCounter类来获取进程的CPU占用率:
PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", process.ProcessName, true);
这里创建了一个PerformanceCounter对象,其中第一个参数表示要统计的类别,第二个参数表示要统计的计数器名称,第三个参数表示特定的进程名称,第四个参数表示是否在实例查询中忽略大小写,这里传入了 true,表示忽略大小写。
PerformanceCounter类还提供了一个重载的构造函数可以同时传入要统计的计数器类别和计数器名称:
PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);
这里将统计整个系统的CPU占用率。
接下来我们可以通过
float cpuUsage = cpuCounter.NextValue();
来获取当前进程的CPU占用率。但是,由于CPU的计算是在逻辑单元中进行的,如果获取CPU的值之间的间隔太短,会出现误差和不准确的情况,因此推荐调用cpuCounter.NextValue()
方法两次,并在方法调用之间使用适当的时间间隔,比如:
cpuCounter.NextValue();
Thread.Sleep(1000); //等待1s
float cpuUsage = cpuCounter.NextValue();
这里我们等待了1秒来获取了最新的CPU占用率。
步骤三:获取进程内存占用率
获取进程内存占用率的方法同样可以使用PerformanceCounter对象:
PerformanceCounter ramCounter = new PerformanceCounter("Process", "Working Set", process.ProcessName);
这里第一个参数还是表示要统计的类别,第二个参数则表示要统计的计数器,这里统计的是进程的物理内存使用,第三个参数表示特定的进程名称。
同样,获取内存占用率的方法也是ramCounter.NextValue()
,同样需要注意间隔时间和调用次数:
ramCounter.NextValue();
Thread.Sleep(1000); //等待1s
float memoryUsage = ramCounter.NextValue() / (1024 * 1024); //将单位转化为MB
这里我们需要将获取到的值除以1024 * 1024
,才能将单位转化为MB。
示例一:获取进程“chrome”的CPU和内存占用率
Process process = Process.GetProcessesByName("chrome")[0];
PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", process.ProcessName, true);
//等待1s,获取最新的CPU占用率
cpuCounter.NextValue();
Thread.Sleep(1000);
float cpuUsage = cpuCounter.NextValue();
PerformanceCounter ramCounter = new PerformanceCounter("Process", "Working Set", process.ProcessName);
//等待1s,获取最新的内存占用率
ramCounter.NextValue();
Thread.Sleep(1000);
float memoryUsage = ramCounter.NextValue() / (1024 * 1024);
Console.WriteLine($"进程chrome的CPU占用率为:{cpuUsage}%,内存占用率为:{memoryUsage}MB");
示例二:获取进程“notepad”的CPU和内存占用率
Process process = Process.GetProcessesByName("notepad")[0];
PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", process.ProcessName, true);
//等待1s,获取最新的CPU占用率
cpuCounter.NextValue();
Thread.Sleep(1000);
float cpuUsage = cpuCounter.NextValue();
PerformanceCounter ramCounter = new PerformanceCounter("Process", "Working Set", process.ProcessName);
//等待1s,获取最新的内存占用率
ramCounter.NextValue();
Thread.Sleep(1000);
float memoryUsage = ramCounter.NextValue() / (1024 * 1024);
Console.WriteLine($"进程notepad的CPU占用率为:{cpuUsage}%,内存占用率为:{memoryUsage}MB");
以上就是使用C#获取特定进程CPU和内存使用率的完整攻略,相信读者们可以轻松地应用到自己的项目实践中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C#获取特定进程CPU和内存使用率 - Python技术站