在以前,我們想獲取CPU,內存等信息就不得不借助win32 API來實現。但現在,.NET FrameWork已經把這些API封裝到.NET類庫中了,所以我們可以借助.NET類庫很輕松的獲取這些信息。首先,介紹幾個要用到的類:
PerformanceCounter:表示windows NT性能計數器組件
ComputerInfo:提供用於獲取與計算機內存,已加載程序集,名稱和操作系統有關信息的屬性
DriveInfo:該類位於System.IO命名空間下,提供對有關驅動器信息的訪問
介紹完幾個必要的類,就開始實踐吧:
1.初始化幾個變量:
this.cpu = new PerformanceCounter("Processor", "% Processor Time", "_Total"); this.cinf = new ComputerInfo();
2.獲取占用CPU的百分比
public double GetCpuPercent() { var percentage = this.cpu.NextValue(); return Math.Round(percentage, 2, MidpointRounding.AwayFromZero); }
3.獲取占用內存的百分比
public double GetMemoryPercent() { var usedMem = this.cinf.TotalPhysicalMemory - this.cinf .AvailablePhysicalMemory ;//總內存減去可用內存 return Math.Round( (double)(usedMem / Convert.ToDecimal(this.cinf.TotalPhysicalMemory) * 100), 2, MidpointRounding.AwayFromZero); }
4.獲取磁盤剩余空間及總空間
/// <summary> /// 根據盤符獲取磁盤信息 /// </summary> /// <param name="diskName"></param> /// <returns>一個自定義類對象</returns> public HardDiskInfo GetHardDiskInfoByName(string diskName) { DriveInfo drive = new DriveInfo(diskName); return new HardDiskInfo { FreeSpace = GetDriveData(drive.AvailableFreeSpace),TotalSpace =GetDriveData (drive.TotalSize ),Name =drive .Name }; } /// <summary> /// 獲取所有驅動盤信息 /// </summary> /// <returns></returns> public IEnumerable<HardDiskInfo> GetAllHardDiskInfo() { List<HardDiskInfo> list = new List<HardDiskInfo>(); foreach (DriveInfo d in DriveInfo.GetDrives()) { if (d.IsReady) { list.Add(new HardDiskInfo { Name = d.Name, FreeSpace = this.GetDriveData(d.AvailableFreeSpace), TotalSpace = this.GetDriveData(d.TotalSize) }); } } return list; } private string GetDriveData(long data)//將磁盤大小的單位由byte轉化為G { return (data / Convert.ToDouble(1024) / Convert.ToDouble(1024) / Convert.ToDouble(1024)).ToString("0.00"); } class HardDiskInfo//自定義類 { public string Name { get; set; } public string FreeSpace { get; set; } public string TotalSpace { get;set;} }
運行結果:
Demo下載: