我正在制作一个程序来监视硬件组件,我试图使用WMI Win32_ComptuterSystem
类获取桌面的RAM容量。我设法得到总RAM的数量,但它是以位而不是GB显示的,我知道我必须进行转换,但我不知道如何去做。
private void GetRamCapacity()
{
var wmi = new ManagementClass("Win32_ComputerSystem");
var providers = wmi.GetInstances();
foreach (var provider in providers)
{
var ramCapacity = Convert.ToInt32(provider["TotalPhysicalMemory"]);
lblRAMCapacity.Text = ramCapacity.ToString();
}
}
1条答案
按热度按时间q35jwt9p1#
请注意,TotalPhysicalMemory返回**
UInt64
值。将其转换为
ulong
而不是Int32
。此外,该值用Bytes
**表示:但是您可能应该使用Win32_PhysicalMemory类的
Capacity
属性返回的值。该Capacity
值提供每个内存银行。原因在一个注解中解释:
请注意,在某些情况下,此属性可能无法返回物理内存的准确值。例如,如果BIOS正在使用某些物理内存,则不准确。
GetPhysicallyInstalledSystemMemory:
BIOS和一些驱动程序可能会保留内存作为内存Map设备的I/O区域,使得内存对操作系统和应用程序不可用。
**
Win32_PhysicalMemory.Capacity
返回的值之和与GetPhysicallyInstalledSystemMemory
**返回的值相同(后者以千字节表示)。计算机必须具有可用的SMBIOS功能(Windows XP及更高版本),否则这些函数将不会返回值。
举个例子:
**
WMIGetTotalPhysicalMemory()
**方法使用WMI
Win32_PhysicalMemory
类每个存储体Capacity
值,对每个存储体的安装内存大小求和。使用**
GetPhysicallyInstalledSystemMemory()
**的比较方法:(This值和
WMIGetTotalPhysicalMemory
返回的值必须相同)如果
GetPhysicallyInstalledSystemMemory
失败,则totalMemory
将变为0
。如果SMBIOS数据无效或小于GlobalMemoryStatusEx()函数返回的值,则此函数将失败。
在这种情况下,GetLastError将返回
ERROR_INVALID_DATA = 13
。GlobalMemoryStatusEx
返回一个MEMORYSTATUSEX
结构,它引用物理内存和虚拟内存的当前状态,加上正在使用的物理内存的近似百分比。请注意,这些值是不稳定的,在调用之间会发生变化:内存状态不断变化。
有关这些值的含义,请参阅MSDN注解。