• 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("提交大小 " + instance.PagedMemorySize64 / 1024);
                        Console.WriteLine("工作设置(内存) " + instance.WorkingSet64 / 1024);
                        Console.WriteLine("线程数 " + instance.Threads.Count);
                        Console.WriteLine("句柄数 " + 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();
            }
        }
    }

  • 相关阅读:
    一步一步精通 Windows Sockets 网络编程(2)
    一步一步精通 Windows Sockets 网络编程(3)
    一步一步精通 Windows Sockets 网络编程(连载)
    Sql Server 创建远程连接
    js 去字符串两边空格
    C# .Net RSA加解密以及SHA1WithRsa签名生成及验签
    win10远程桌面怎么保存密码?win10让远程桌面记住密码的方法
    mysql skipgranttables 无法启动
    C# .Net WebClient http及https请求
    iis8 是没有读系统的短日期格式
  • 原文地址:https://www.cnblogs.com/94cool/p/6336593.html
Copyright © 2020-2023  润新知