2011-04-06 79 views
1

我正在嘗試確定計算機中安裝的物理內存量。爲了實現這一點,我使用WMI(通過.net 4.0),它是服務。問題是無論遠程計算機有多少內存,返回的值都是4GB。這已經過測試有三個遠程計算機:問題在遠程計算機上讀取內存量

  • 虛擬機,1GB RAM,Windows 2003的
  • 物理機,2GB內存,Windows XP中
  • 物理機,2GB內存,64位Windows 7

我自己正在運行物理機,4GB內存,Windows 7 64bit。

顯示代碼:

uint phisicalMemorySize = 0; 

ConnectionOptions co = new ConnectionOptions(); 
co.Username = null; 

ManagementScope ms = new ManagementScope("\\\\" + computerName, co); 
ObjectQuery q = new ObjectQuery("select TotalPhysicalMemory from Win32_ComputerSystem"); 
ManagementObjectSearcher os = new ManagementObjectSearcher(ms, q); 
ManagementObjectCollection moc = os.Get(); 

foreach (ManagementObject o in moc) 
{ 
    phisicalMemorySize += Convert.ToUInt64(o["TotalPhysicalMemory"], CultureInfo.InvariantCulture); 
} 

我一直在使用select Capacity from Win32_PhysicalMemoryselect TotalVisibleMemorySize from Win32_OperatingSystem的查詢,但無濟於事也試過。在末尾總是4GB。

回答

1

發現問題。它是與

ManagementScope ms = new ManagementScope("\\\\" + computerName, co); 

線。正確的將是

ManagementScope ms = new ManagementScope("\\\\" + computerName + "\\root\\CIMV2", co); 

它看起來像默認爲本地計算機。

感謝漢斯誰向我指出WMI代碼造物主。該工具真的幫助了很多。

4

TotalPhysicalMemory在MSDN庫文檔大聲免責聲明:

的物理內存的總大小。是 意識到,在某些情況下, 此屬性可能不會返回 準確值的物理內存。例如,如果BIOS正在使用某些物理內存,則不是 。爲了獲得精確的 值,使用 Win32_PhysicalMemory而不是能力屬性。

Afaik,所有現代機器都將他們的BIOS複製到內存中。我認爲Capacity屬性是多少內存可用機器,不存在多少。在任何32位操作系統上都是2 GB,對於64位操作系統上的32位進程則爲4 GB。比較,比如,列表<> .Capacity vs Count屬性。

我得到了TotalPhys的一個體面的價值,3千兆字節,我知道我在我的筆記本電腦上。容量是2千兆字節,與操作系統相匹配。 WMI有時會出現碎片,這並不完美。

使用WMI Code Creator utility獲得第二個意見。我認爲這是一個.NET 1.1程序,因此如果您針對64位操作系統運行它,請注意其結果。如果您使用Visual Studio 2010,請注意項目中的平臺目標設置。它默認爲x86,所以即使在64位操作系統上,也可以以32位模式運行。項目+屬性,生成選項卡,平臺目標設置。

+0

我相信你對容量錯了。它返回**每個棒的容量**([點擊](http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/32da73c1-de42-4c74-b59e-4f1e51d2e7a2))當然不會假設在WMI裏面改變了。 RAM中的BIOS又有多大? 100 MB?這不應該太偏離我的結果。你用什麼類和財產來獲得筆記本電腦中提到的3 GB? – AtaSmrk 2011-04-07 07:10:26