c# 获取某个进程的CPU使用百分百(类似任务管理器中显示CPU)
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Management;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace 进程监控
{
class Program
{
static void Main(string[] args)
{
Process[] processes = Process.GetProcessesByName("taskmgr");
foreach (Process instance in processes)
{
Console.WriteLine("");
Console.WriteLine("ProcessName:" + instance.ProcessName);
try
{
//Console.WriteLine("提交大小\t" + instance.PagedMemorySize64 / 1024);
Console.WriteLine("工作设置(内存)\t" + instance.WorkingSet64 / 1024);
Console.WriteLine("线程数\t" + instance.Threads.Count);
Console.WriteLine("句柄数\t" + instance.HandleCount);
}
catch { }
}
Process p = processes[1];
//PerformanceCounter ramCounter = new PerformanceCounter("Process", "Working Set", p.ProcessName);
//PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", p.ProcessName);
var objQuery = new ObjectQuery("select * from Win32_Process WHERE ProcessID = " + p.Id);
var moSearcher = new ManagementObjectSearcher(objQuery);
DateTime firstSample = DateTime.MinValue, secondSample = DateTime.MinValue;
double ProcessorUsage;
double msPassed;
ulong u_OldCPU = 0;
while (true)
{
var gets = moSearcher.Get();
foreach (ManagementObject mObj in gets)
{
try
{
if (firstSample == DateTime.MinValue)
{
firstSample = DateTime.Now;
mObj.Get();
u_OldCPU = (ulong)mObj["UserModeTime"] + (ulong)mObj["KernelModeTime"];
}
else
{
secondSample = DateTime.Now;
mObj.Get();
ulong u_newCPU = (ulong)mObj["UserModeTime"] + (ulong)mObj["KernelModeTime"];
msPassed = (secondSample - firstSample).TotalMilliseconds;
ProcessorUsage = (u_newCPU - u_OldCPU) / (msPassed * 100.0 * Environment.ProcessorCount);
u_OldCPU = u_newCPU;
firstSample = secondSample;
Console.WriteLine("ProcessorUsage:" + (int)ProcessorUsage);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message + ex.StackTrace);
Console.WriteLine(ex.InnerException.Message);
}
}
Thread.Sleep(1000);
}
Console.ReadLine();
}
}
}
相关文章
- C# 获取计算机cpu,硬盘,内存相关的信息
- C#轻量级日志监控器EasyLogMonitor
- C#三种字符串拼接方法的效率对比
- C#.NET常见问题(FAQ)-VS如何整个项目中查找字符串
- C# Java间进行RSA加密解密交互
- c# 框架系列 ———— EFCore 模型篇 [一]
- Python 和C#的交互
- C# Xml 移除指定节点
- c#如何处理自定义消息
- c# 进程间通信
- Atitit,通过pid获取进程文件路径 java php c#.net版本大总结
- C# 进程间通信之二传递复杂数据类型(转)
- C#使用线程池创建线程
- C# ListView用法详解
- C#开发PACS医学影像处理系统(十九):Dicom影像放大镜
- C# 中使用 Redis 简单存储
- C# 进程间的同步 EventWaitHandle
- C# 中的"yield"使用
- C#综合揭秘——细说进程、应用程序域与上下文之间的关系