2016-02-23 66 views
1

我在C#中使用'ObjectQuery'來獲取系統上安裝的總RAM。我從'Win32_PhysicalMemory'對象中捕獲'容量'。 以下是代碼:什麼是Win32_PhysicalMemory類中的Bank標籤

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棒)

我還檢查「BankLabel」變量在這些系統上的「Win32_PhysicalMemory」對象。它如下'Bank0/1'。 現在據我的理解,我猜測1GB的內存已經被分成兩個512-512MB的存儲區並且被切換。

  1. 現在的問題是,我的理解是關於內存分成兩個銀行,因此顯示爲每個512 MB。
  2. 也有可能將內存分成兩個不相等的銀行,如3 GB分爲1 GB和2 GB。

回答

1

我不確定你的問題的答案,但我想我有一個解決你的問題。試試這個:

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

val.GetPropertyValue("TotalPhysicalMemory") 

,將讓你的RAM數量以字節爲單位。您必須將其轉換爲MiB或GiB。另一方面,如果你試圖確定系統中RAM的大小,而不是系統中RAM的大小,那麼打開一個,看看它裏面是否有多個棒。這將很快回答你的問題。

+1

是的,我已經檢查忘記提及它,它是一個1GB的RAM棒(得到它爲512 MB)。我想確定以編程方式安裝相同。 'Win32_ComputerSystem'中的'TotalPhysicalMemory'屬性在4GB系統上給出了'RAM'爲3386 MB。 'Win32_PhysicalMemory'中的'容量'給出了4096 MB,這是正確的。 –

+0

@SaurabhHarwande給你道具。我不知道TotalPhysicalMemory不會計算其他硬件使用的內存(例如共享視頻內存)。 [此鏈接](http://briandesmond.com/blog/getting-total-installed-memory-with-wmi/)和[此鏈接](http://www.computerperformance.co.uk/vbscript/wmi_memory。 htm)更多地解釋它。 – Tim