亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

詳解C#獲取特定進程CPU和內存使用率

2020-01-24 00:56:30
字體:
來源:轉載
供稿:網友

首先是獲取特定進程對象,可以使用Process.GetProcesses()方法來獲取系統中運行的所有進程,或者使用Process.GetCurrentProcess()方法來獲取當前程序所對應的進程對象。當有了進程對象后,可以通過進程對象名稱來創建PerformanceCounter類型對象,通過設定PerformanceCounter構造函數的參數實現獲取特定進程的CPU和內存使用情況。

具體實例代碼如下:

首先是獲取本機中所有進程對象,分別輸出某一時刻各個進程的內存使用情況:

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類:

using System;using System.Collections.Generic;using System.Diagnostics;using System.Threading;using System.IO;using System.Text;using System.Management;using System.Runtime.InteropServices;namespace CSharpPerformance{  public class SystemInfo  {    private int m_ProcessorCount = 0;  //CPU個數    private PerformanceCounter pcCpuLoad;  //CPU計數器    private long m_PhysicalMemory = 0;  //物理內存    private const int GW_HWNDFIRST = 0;    private const int GW_HWNDNEXT = 2;    private const int GWL_STYLE = (-16);    private const int WS_VISIBLE = 268435456;    private const int WS_BORDER = 8388608;    #region AIP聲明    [DllImport("IpHlpApi.dll")]    extern static public uint GetIfTable(byte[] pIfTable, ref uint pdwSize, bool bOrder);    [DllImport("User32")]    private extern static int GetWindow(int hWnd, int wCmd);    [DllImport("User32")]    private extern static int GetWindowLongA(int hWnd, int wIndx);    [DllImport("user32.dll")]    private static extern bool GetWindowText(int hWnd, StringBuilder title, int maxBufSize);    [DllImport("user32", CharSet = CharSet.Auto)]    private extern static int GetWindowTextLength(IntPtr hWnd);    #endregion    #region 構造函數    /// <summary>    /// 構造函數,初始化計數器等    /// </summary>    public SystemInfo()    {      //初始化CPU計數器      pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total");      pcCpuLoad.MachineName = ".";      pcCpuLoad.NextValue();      //CPU個數      m_ProcessorCount = Environment.ProcessorCount;      //獲得物理內存      ManagementClass mc = new ManagementClass("Win32_ComputerSystem");      ManagementObjectCollection moc = mc.GetInstances();      foreach (ManagementObject mo in moc)      {        if (mo["TotalPhysicalMemory"] != null)        {          m_PhysicalMemory = long.Parse(mo["TotalPhysicalMemory"].ToString());        }      }    }    #endregion    #region CPU個數    /// <summary>    /// 獲取CPU個數    /// </summary>    public int ProcessorCount    {      get      {        return m_ProcessorCount;      }    }    #endregion    #region CPU占用率    /// <summary>    /// 獲取CPU占用率    /// </summary>    public float CpuLoad    {      get      {        return pcCpuLoad.NextValue();      }    }    #endregion    #region 可用內存    /// <summary>    /// 獲取可用內存    /// </summary>    public long MemoryAvailable    {      get      {        long availablebytes = 0;        //ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_PerfRawData_PerfOS_Memory");        //foreach (ManagementObject mo in mos.Get())        //{        //  availablebytes = long.Parse(mo["Availablebytes"].ToString());        //}        ManagementClass mos = new ManagementClass("Win32_OperatingSystem");        foreach (ManagementObject mo in mos.GetInstances())        {          if (mo["FreePhysicalMemory"] != null)          {            availablebytes = 1024 * long.Parse(mo["FreePhysicalMemory"].ToString());          }        }        return availablebytes;      }    }    #endregion    #region 物理內存    /// <summary>    /// 獲取物理內存    /// </summary>    public long PhysicalMemory    {      get      {        return m_PhysicalMemory;      }    }    #endregion    #region 結束指定進程    /// <summary>    /// 結束指定進程    /// </summary>    /// <param name="pid">進程的 Process ID</param>    public static void EndProcess(int pid)    {      try      {        Process process = Process.GetProcessById(pid);        process.Kill();      }      catch { }    }    #endregion    #region 查找所有應用程序標題    /// <summary>    /// 查找所有應用程序標題    /// </summary>    /// <returns>應用程序標題范型</returns>    public static List<string> FindAllApps(int Handle)    {      List<string> Apps = new List<string>();      int hwCurr;      hwCurr = GetWindow(Handle, GW_HWNDFIRST);      while (hwCurr > 0)      {        int IsTask = (WS_VISIBLE | WS_BORDER);        int lngStyle = GetWindowLongA(hwCurr, GWL_STYLE);        bool TaskWindow = ((lngStyle & IsTask) == IsTask);        if (TaskWindow)        {          int length = GetWindowTextLength(new IntPtr(hwCurr));          StringBuilder sb = new StringBuilder(2 * length + 1);          GetWindowText(hwCurr, sb, sb.Capacity);          string strTitle = sb.ToString();          if (!string.IsNullOrEmpty(strTitle))          {            Apps.Add(strTitle);          }        }        hwCurr = GetWindow(hwCurr, GW_HWNDNEXT);      }      return Apps;    }    #endregion     }}

然后是執行代碼:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;using System.Threading;namespace CSharpPerformance{//該程序可以實時監控程序本身對應進程的工作集、私有工作集和CPU使用率  class Program  {    static void Main(string[] args)    {      //獲取當前進程對象      Process cur = Process.GetCurrentProcess();      PerformanceCounter curpcp = new PerformanceCounter("Process", "Working Set - Private", cur.ProcessName);      PerformanceCounter curpc = new PerformanceCounter("Process", "Working Set", cur.ProcessName);      PerformanceCounter curtime = new PerformanceCounter("Process", "% Processor Time", cur.ProcessName);      //上次記錄CPU的時間      TimeSpan prevCpuTime = TimeSpan.Zero;      //Sleep的時間間隔      int interval = 1000;      PerformanceCounter totalcpu = new PerformanceCounter("Processor", "% Processor Time", "_Total");      SystemInfo sys = new SystemInfo();      const int KB_DIV = 1024;      const int MB_DIV = 1024 * 1024;      const int GB_DIV = 1024 * 1024 * 1024;      while (true)      {        //第一種方法計算CPU使用率        //當前時間        TimeSpan curCpuTime = cur.TotalProcessorTime;        //計算        double value = (curCpuTime - prevCpuTime).TotalMilliseconds / interval / Environment.ProcessorCount * 100;        prevCpuTime = curCpuTime;        Console.WriteLine("{0}:{1} {2:N}KB CPU使用率:{3}", cur.ProcessName, "工作集(進程類)", cur.WorkingSet64 / 1024,value);//這個工作集只是在一開始初始化,后期不變        Console.WriteLine("{0}:{1} {2:N}KB CPU使用率:{3}", cur.ProcessName, "工作集    ", curpc.NextValue() / 1024,value);//這個工作集是動態更新的        //第二種計算CPU使用率的方法        Console.WriteLine("{0}:{1} {2:N}KB CPU使用率:{3}%", cur.ProcessName, "私有工作集  ", curpcp.NextValue() / 1024,curtime.NextValue()/Environment.ProcessorCount);        //Thread.Sleep(interval);        //第一種方法獲取系統CPU使用情況        Console.Write("/r系統CPU使用率:{0}%", totalcpu.NextValue());        //Thread.Sleep(interval);        //第二章方法獲取系統CPU和內存使用情況        Console.Write("/r系統CPU使用率:{0}%,系統內存使用大?。簕1}MB({2}GB)", sys.CpuLoad, (sys.PhysicalMemory - sys.MemoryAvailable) / MB_DIV, (sys.PhysicalMemory - sys.MemoryAvailable) / (double)GB_DIV);        Thread.Sleep(interval);      }      Console.ReadLine();    }  }}

以上程序可以正常運行,沒隔1S刷新一次,實現動態顯示本程序對應進程的CPU和內存使用情況。

原文鏈接:http://www.cnblogs.com/maowang1991/p/3285983.html

 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情亚洲视频| 在线看福利67194| 九九久久精品一区| 成人久久18免费网站图片| 亚洲理论在线a中文字幕| 2019亚洲日韩新视频| 91精品啪aⅴ在线观看国产| 性欧美长视频免费观看不卡| 国产日韩在线看片| 国产成人精品网站| 午夜精品久久久久久久99热| 成人免费观看49www在线观看| 国产精品一二区| 日韩精品极品视频免费观看| 美女福利视频一区| 国产一区二区三区视频在线观看| 久久成人免费视频| 国内久久久精品| 日本一区二区三区四区视频| 国产精品扒开腿做爽爽爽男男| 日韩精品中文字幕久久臀| 中文字幕自拍vr一区二区三区| 久久福利视频导航| 久久99精品久久久久久青青91| 精品久久久久久中文字幕一区奶水| 日韩精品极品在线观看播放免费视频| 最近2019年中文视频免费在线观看| 一区二区在线免费视频| 亚洲精品日韩av| 中文字幕无线精品亚洲乱码一区| 欧美日韩国产麻豆| 久久国产精品久久精品| 国产98色在线| 日韩欧美亚洲一二三区| 亚洲欧美国产精品久久久久久久| 日本高清不卡在线| 亚洲电影免费观看高清| 国内精品久久久久久久| 国产精品爽黄69天堂a| 久久久精品中文字幕| 日韩精品中文字幕在线播放| 国产精品美女久久久免费| 精品无人区乱码1区2区3区在线| 色综合天天综合网国产成人网| 91精品国产乱码久久久久久久久| 亚洲精品乱码久久久久久按摩观| 国产91色在线播放| 777午夜精品福利在线观看| 不卡av在线网站| 在线精品国产欧美| 日韩美女免费观看| 国产精品日韩一区| 国内精品久久久久伊人av| 亚洲国产精品视频在线观看| 欧美性猛交xxxx免费看久久久| 色婷婷综合成人| 日韩电影免费观看在线| 亚洲精品有码在线| 国内精品久久久久久影视8| 亚洲国产另类久久精品| www.日韩欧美| 45www国产精品网站| 亚洲欧美国产精品va在线观看| 日本久久久久亚洲中字幕| 日韩视频在线观看免费| 成人性生交大片免费看视频直播| 中文字幕在线成人| 黄网动漫久久久| 成人免费观看a| 91欧美精品午夜性色福利在线| 中文字幕国内精品| 51色欧美片视频在线观看| 国产a级全部精品| 91精品美女在线| 亚洲国产中文字幕在线观看| zzijzzij亚洲日本成熟少妇| 成人在线一区二区| 中文字幕av一区二区三区谷原希美| 久久精品99久久久久久久久| 美日韩丰满少妇在线观看| 日韩在线视频网站| 97精品国产97久久久久久| 亚洲激情电影中文字幕| 5252色成人免费视频| 亚洲图片欧洲图片av| 久久久精品在线| 欧美极度另类性三渗透| 久久色免费在线视频| 久久久国产视频91| 成人精品一区二区三区电影免费| 欧美精品生活片| 精品久久在线播放| 欧美日韩国产影院| 国产精品色婷婷视频| 亚洲色图激情小说| 亚洲国模精品私拍| 日韩欧美在线视频观看| 午夜精品久久久久久久男人的天堂| 另类天堂视频在线观看| 日韩av片免费在线观看| 欧美床上激情在线观看| 日韩亚洲一区二区| www.xxxx精品| 亚洲美女免费精品视频在线观看| 亚洲综合精品一区二区| 一区二区三区 在线观看视| 亚洲福利视频网站| 狠狠久久亚洲欧美专区| 欧美色图在线视频| 在线播放国产一区二区三区| 亚洲精美色品网站| 欧洲亚洲在线视频| 性视频1819p久久| 久久影院模特热| 久久国产精品99国产精| 91av在线播放| 亚洲国产成人精品女人久久久| 欧美激情在线播放| 中文字幕无线精品亚洲乱码一区| 91av在线国产| 亚洲电影av在线| 久久精品中文字幕电影| 国产成人精品视| 日韩中文字幕在线看| 亚洲欧美中文日韩在线| 国产综合在线视频| 精品福利免费观看| 日韩成人网免费视频| 一区二区三区无码高清视频| 日本亚洲欧美三级| 欧洲精品久久久| 亚洲情综合五月天| 精品久久久久久久久久| 欧美丰满少妇xxxxx做受| 九九九久久国产免费| 亚洲精品美女视频| 亚洲视频一区二区三区| 色狠狠av一区二区三区香蕉蜜桃| 久久成人这里只有精品| 国产精品第三页| 自拍亚洲一区欧美另类| 欧美乱妇高清无乱码| 精品一区二区三区四区在线| 日韩在线视频免费观看高清中文| 欧美日韩一区二区免费在线观看| 欧美裸身视频免费观看| 伊人久久久久久久久久久久久| 欧美伊久线香蕉线新在线| 日韩女在线观看| 欧美激情乱人伦| 日韩欧美高清视频| 欧美福利小视频| 亚洲欧美日韩另类| 91热福利电影| 欧美肥老太性生活视频| 亚洲摸下面视频| 国产v综合ⅴ日韩v欧美大片| 中文字幕av一区二区三区谷原希美| 精品少妇一区二区30p| 亚洲a在线播放| 九九热视频这里只有精品| 国产精品三级在线| 97超级碰在线看视频免费在线看| 久久免费视频在线|