C# Win32_PhysicalMemory类中的银行标签是什么

C# Win32_PhysicalMemory类中的银行标签是什么,c#,.net,wmi,ram,wmi-query,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(obj

我使用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为1GB,但被代码捕获为512MB。(编辑:它是1 GB的单内存条)

我还检查了这些系统上“Win32_PhysicalMemory”对象中的“BankLabel”变量。它如下所示“Bank0/1”。 现在据我所知,我猜1GB内存被分成了两组,每组512-512MB,并且它们是交换的

  • 现在的问题是,我对内存被分成两个存储库的理解是否正确,因此每个存储库显示为512MB
  • 也有可能一个内存会被分成两个不相等的存储组,比如3GB被分成1GB和2GB

  • 我不确定你的问题的答案,但我想我有办法解决你的问题。请尝试以下方法:

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

    这将得到以字节为单位的RAM量。您必须将其转换为MIB或GIB


    另一方面,如果您试图确定系统中的RAM是什么,而不是系统中的RAM是多少,那么打开一个,看看是否有多个棒。这将很快回答您的问题。

    是的,我已经检查过了,但忘了提到它,它是一个1GB的单内存条(获得512MB)。我想确定同样的安装程序。此外,“Win32_ComputerSystem”中的“TotalPhysicalMemory”属性在4GB系统上给出的“RAM”为3386 MBs“Win32_PhysicalMemory”中的“容量”为4096 MBs,这是合适的。@SaurabhHarwande必须给你道具。我不知道TotalPhysicalMemory不计算BIOS用于其他硬件的内存(例如共享视频内存)。再解释一下。
    val.GetPropertyValue("TotalPhysicalMemory")