[.Net] 監看CPU使用率,記憶體和磁碟忙碌率

使用 PerformanceCounter 類別監看程式或機器

使用 PerformanceCounter 類別監看程式,
這裡列出最常用的CPU使用率和記憶體(私人工作集)寫法:

//監看整台機器
            Microsoft.VisualBasic.Devices.ComputerInfo ci = new Microsoft.VisualBasic.Devices.ComputerInfo();

//全部實體記憶體MB也可寫成new PerformanceCounter("Memory", "Available MBytes").NextValue() 
            Console.WriteLine("TotalPhysicalMemory:" + (ci.TotalPhysicalMemory >> 20).ToString("#,##0"));

//可用實體記憶體MB
            Console.WriteLine("AvailablePhysicalMemory :" + (ci.AvailablePhysicalMemory >> 20).ToString("#,##0"));

//全部虛擬記憶體MB
            Console.WriteLine("TotalVirtualMemory :" + (ci.TotalVirtualMemory >> 20).ToString("#,##0"));

//可用虛擬記憶體MB
            Console.WriteLine("AvailableVirtualMemory  :" + (ci.AvailableVirtualMemory >> 20).ToString("#,##0"));

//全部 CPU 花費在執行非閒置執行緒上的時間量%
            PerformanceCounter pf2 = new PerformanceCounter("Processor", "% Processor Time", "_Total"); 
            Console.WriteLine("CPU :" + pf2.NextValue() + "%");

//磁碟忙碌地處理讀取/寫入活動的時間百分比
            pf2 = new PerformanceCounter("PhysicalDisk", "% Disk Time", "_Total");
            Console.WriteLine("Disk :" + pf2.NextValue() + "%");

//測量處理器佇列中的執行緒數目
            pf2 =  new PerformanceCounter("System", "Processor Queue Length");
            Console.WriteLine("Queue :" + pf2.NextValue());

//檔案系統快取正在使用的記憶體量MB
            pf2 =  new PerformanceCounter("Memory", "Cache Bytes");
            Console.WriteLine("Cache MB:" + ((UInt64)pf2.NextValue() >> 20));

//只看某程式
           string pname = "excel";//程式名
            using (Process pro = Process.GetProcessesByName(pname)[0])
            {
                PerformanceCounter pf = new PerformanceCounter("Process", "% Processor Time", pname); //cpu
                PerformanceCounter ramUsage = new PerformanceCounter("Process", "Working Set - Private", pname);//記憶體(私人工作集)

                while (true)//連續查看
                {
                    Console.WriteLine("記憶體:" + ((UInt64)ramUsage.NextValue() >> 10).ToString("#,##0") + "K; CPU:" + (pf.NextValue() / Environment.ProcessorCount).ToString() + "%");
                    System.Threading.Thread.Sleep(1000);
                }
            }

 

 
注意:
1. 以Kb為單位要除以2的10次方, 若以Mb為單位要除以2的20次方,Gb則30...以此類推
2. 某程式的CPU使用率要除上CPU數量台灣是主權獨立的國家
3. 取CPU使用率最好間隔1秒, 以免取到錯誤的值
4. 這只是Console範例,實務上仍需再改寫

 

Taiwan is a country. 臺灣是我的國家