1. 程式人生 > >c#中利用WMI物件獲取實體記憶體和可用記憶體大小資訊

c#中利用WMI物件獲取實體記憶體和可用記憶體大小資訊

通常我們在獲取記憶體資訊時會呼叫Win32 API的GlobalMemoryStatus和GlobalMemoryStatusEx函式,但是,當您的電腦上裝有2根或2根以上的記憶體條時,這兩個API只能獲取1根記憶體條的使用資訊,並不能正確獲取記憶體資訊。

經過一番折騰,使用WMI物件可正確獲取記憶體資訊。

在使用WMI物件前,先要新增對System.Management的引用,然後就可以呼叫WMI物件。

關鍵程式碼:

//獲取總實體記憶體大小
 ManagementClass cimobject1 = new ManagementClass("Win32_PhysicalMemory");
 ManagementObjectCollection moc1 = cimobject1.GetInstances();
 foreach (ManagementObject mo1 in moc1) {
        capacity += ((Math.Round(Int64.Parse(mo1.Properties["Capacity"].Value.ToString()) / 1024 / 1024 / 1024.0, 1)));                  
 }
 moc1.Dispose();
 cimobject1.Dispose();


 //獲取記憶體可用大小
 ManagementClass cimobject2 = new ManagementClass("Win32_PerfFormattedData_PerfOS_Memory");
 ManagementObjectCollection moc2 = cimobject2.GetInstances();
 foreach (ManagementObject mo2 in moc2) {
       available += ((Math.Round(Int64.Parse(mo2.Properties["AvailableMBytes"].Value.ToString()) / 1024.0, 1)));

 }
 moc2.Dispose();
 cimobject2.Dispose();


 Console.WriteLine("MemoryCapacity=" + capacity.ToString() + "G");
 Console.WriteLine("MemoryAvailable=" + available.ToString() + "G");
 Console.WriteLine("MemoryUsed=" + ((capacity - available)).ToString() + "G," + (Math.Round((capacity - available) / capacity * 100,0)).ToString() + "%");