zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }

  • 相关阅读:
    【好文翻译】10个免费的压力测试工具(Web)
    【高手介绍】谷歌内部代码审查(code review)介绍[翻译]
    【淘宝内部好文转发】我们每天面对的互联网用户到底在想什么?
    写给开发者:别让他人用你的App赚钱[转]
    新手应该知道的二十三条关于JavaScript的最佳实践
    开发人员应该为这样的代码感到惭愧
    [Web App]必胜客宅急送产品设计思路介绍[转]
    WallsEveryDay 必应桌面壁纸
    GroupLayout 布局
    JButton 做图片框
  • 原文地址:https://www.cnblogs.com/94cool/p/6336593.html
Copyright © 2011-2022 走看看