什么是Win32_PhysicalMemory类

时间:2016-02-23 10:52:43

标签: c# .net wmi ram wmi-query

我在C#中使用'ObjectQuery'来获取系统上安装的总RAM。我从'Win32_PhysicalMemory'对象中捕获'容量'。 以下是代码:

double totalCapacity = 0;
ObjectQuery objectQuery = new ObjectQuery("select * from Win32_PhysicalMemory");
ManagementObjectSearcher searcher = new
ManagementObjectSearcher(objectQuery);
ManagementObjectCollection vals = searcher.Get();
foreach (ManagementObject val in vals)
{
    totalCapacity += System.Convert.ToDouble(val.GetPropertyValue("Capacity"));
}
double ramCapacity = totalCapacity / 1048576;
return ramCapacity.ToString();

它在大多数系统上运行良好。但是有一些系统的安装RAM为1 GB,但代码被抓取为512 MB。 编辑:这是1 GB的单个RAM棒)

我还检查了那些系统上'Win32_PhysicalMemory'对象中的'BankLabel'变量。它如下'Bank0 / 1'。 现在据我所知,我猜1 GB的内存已分为两组,每组512 - 512 MB,并且已经切换。

  1. 现在的问题是,我的理解是关于将内存分成两个库,因此每个显示为512 MB。
  2. 也有可能将内存划分为两个不等的库,例如3 GB分为1 GB和2 GB。

1 个答案:

答案 0 :(得分:1)

我不确定你的问题的答案,但我认为我有一个解决你的问题的方法。试试这个:

ObjectQuery objectQuery = new ObjectQuery("select * from Win32_ComputerSystem");

val.GetPropertyValue("TotalPhysicalMemory")

这将获得以字节为单位的RAM量。您必须将其转换为获得MiB或GiB。

另一方面,如果您正在尝试确定系统中的RAM而不是系统中有多少RAM,那么请打开一个打开并查看其中是否有多个内存。这将很快回答你的问题。