How to get the CPU, RAM and Disk drive usage of the system in C# code?
            Asked
            
        
        
            Active
            
        
            Viewed 6.1k times
        
    4 Answers
27
            Please search SO; there are several similiar questions:
 
    
    
        Community
        
- 1
- 1
 
    
    
        Mitch Wheat
        
- 295,962
- 43
- 465
- 541
- 
                    1How to get the disk drive usage? – Sauron Aug 10 '09 at 05:07
- 
                    1Through the Performance Counter class. By changing the category. – Aamir Aug 10 '09 at 05:28
18
            
            
        Here is a solution which will output disk usage, the total disk percent being used at the time that Timer99 is polled:
 using System;
 using System.Diagnostics;
 using System.Windows;
 namespace diskpercent
 {
     public partial class MainWindow : Window
     {
         DispatcherTimer Timer99 = new DispatcherTimer();
         public MainWindow()
         {
             InitializeComponent();
             Timer99.Tick += Timer99_Tick; // don't freeze the ui
             Timer99.Interval = new TimeSpan(0, 0, 0, 0, 1024);
             Timer99.IsEnabled = true;
         }
         public PerformanceCounter myCounter =
            new PerformanceCounter("PhysicalDisk", "% Disk Time", "_Total");
         public Int32 j = 0;
         public void Timer99_Tick(System.Object sender, System.EventArgs e)
         {
                 //Console.Clear();
             j = Convert.ToInt32(myCounter.NextValue());      
                 //Console.WriteLine(j);
             textblock1.Text = j.ToString();
         }
     }
 }
and here is a list of common performance counters:
 PerformanceCounter("Processor", "% Processor Time", "_Total");
 PerformanceCounter("Processor", "% Privileged Time", "_Total");
 PerformanceCounter("Processor", "% Interrupt Time", "_Total");
 PerformanceCounter("Processor", "% DPC Time", "_Total");
 PerformanceCounter("Memory", "Available MBytes", null);
 PerformanceCounter("Memory", "Committed Bytes", null);
 PerformanceCounter("Memory", "Commit Limit", null);
 PerformanceCounter("Memory", "% Committed Bytes In Use", null);
 PerformanceCounter("Memory", "Pool Paged Bytes", null);
 PerformanceCounter("Memory", "Pool Nonpaged Bytes", null);
 PerformanceCounter("Memory", "Cache Bytes", null);
 PerformanceCounter("Paging File", "% Usage", "_Total");
 PerformanceCounter("PhysicalDisk", "Avg. Disk Queue Length", "_Total");
 PerformanceCounter("PhysicalDisk", "Disk Read Bytes/sec", "_Total");
 PerformanceCounter("PhysicalDisk", "Disk Write Bytes/sec", "_Total");
 PerformanceCounter("PhysicalDisk", "Avg. Disk sec/Read", "_Total");
 PerformanceCounter("PhysicalDisk", "Avg. Disk sec/Write", "_Total");
 PerformanceCounter("PhysicalDisk", "% Disk Time", "_Total");
 PerformanceCounter("Process", "Handle Count", "_Total");
 PerformanceCounter("Process", "Thread Count", "_Total");
 PerformanceCounter("System", "Context Switches/sec", null);
 PerformanceCounter("System", "System Calls/sec", null);
 PerformanceCounter("System", "Processor Queue Length", null);
 
    
    
        pollaris
        
- 1,281
- 17
- 20
- 
                    1This one gives the free space on a disk : PerformanceCounter("LogicalDisk", "FreeMegabytes", "C:") – Ben Oct 12 '21 at 13:51
1
            
            
        Drives
static void Main(string[] args)
{
var drives = DriveInfo.GetDrives();
foreach (DriveInfo info in drives)
{
      Console.WriteLine("Name: {0}\nSize: {1}\nDrive Format: {2}", info.Name, info.TotalSize, info.DriveFormat);
}
 Console.ReadLine();
}
 
    
    
        Fernandes
        
- 19
- 3
0
            
            
        There is a NuGet package called hardware.Info by Jinjinov See https://github.com/Jinjinov/Hardware.Info for details.
Code sample:
hardwareInfo.RefreshAll();
//Memory
Console.WriteLine(hardwareInfo.MemoryStatus);
//CPU
foreach (var cpu in hardwareInfo.CpuList)
{
    Console.WriteLine(cpu);
    foreach (var cpuCore in cpu.CpuCoreList)
        Console.WriteLine(cpuCore);
}
//Drives
foreach (var drive in hardwareInfo.DriveList)
{
    Console.WriteLine(drive);
    foreach (var partition in drive.PartitionList)
    {
        Console.WriteLine(partition);
        foreach (var volume in partition.VolumeList)
            Console.WriteLine(volume);
    }
}
 
    
    
        adinas
        
- 4,150
- 3
- 37
- 47
