c#中利用WMI物件獲取實體記憶體和可用記憶體大小資訊
阿新 • • 發佈:2019-02-12
通常我們在獲取記憶體資訊時會呼叫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() + "%");