2009-10-02 87 views
0

我對VB類ComputerInfo中的屬性TotalVirtualMemory有疑問。我從幾臺不同的計算機上的代碼檢查了這個屬性,並且這個數字總是2047 MB​​。這很奇怪,因爲我知道這些計算機上的虛擬內存不同(〜1GB,〜2GB和〜3.5GB)。有誰知道爲什麼它是這樣的,有沒有其他方法來獲得總的和可用的虛擬內存?ComputerInfo.TotalVirtualMemory不正確

問候 丹尼爾

回答

4

您可以使用WMI來獲得內存信息:

ManagementObjectSearcher mgmtObjects = new ManagementObjectSearcher("Select * from Win32_OperatingSystem"); 

    foreach (var item in mgmtObjects.Get()) 
    { 
     Console.WriteLine("FreeVirtualMemory:" + item.Properties["FreeVirtualMemory"].Value); 
     Console.WriteLine("TotalVirtualMemorySize:" + item.Properties["TotalVirtualMemorySize"].Value); 
    } 
+0

如下面Martin所說,如果將「Win32_ComputerSystem」更改爲「Win32_OperatingSystem」,這就像一個魅力。謝謝! – 2009-10-02 12:40:58

0

我不知道,但它可能上衣的最大內存是32位程序可以分配(2GB)。你有沒有試過在64位機器上測試它?

+0

這不是32位程序可以分配的最大內存*,它是32位程序可以同時映射到其*地址空間*的最大內存。 – OregonGhost 2009-10-02 12:09:23

2

這可能是一個情況下WMI會提供正確的信息給你。使用Scriptomatic瀏覽可用對象,Win32_PageFile對象可能包含您在做什麼。

編輯:這是Win32_OperatingSystem,而不是Win32_ComputerSystem,但否則湯姆弗雷的代碼是正確的。

+0

ups,你是對的,謝謝你指出 – TJF 2009-10-02 13:57:50

2

TotalVirtualMemory不返回計算機上的虛擬內存量。而是返回程序可用的虛擬地址空間。

這幾乎總是2GB,這是由windows(至少由win32)分配給一個操作程序的地址空間量。有關虛擬地址空間的更多信息,您可以查看Jeffrey Richter的「高級Windows」,該文檔將詳細介紹。

爲了得到這個信息,您可以添加到System.Management.dll參考,並運行此

System.Management.ManagementObject logicalMemory = new 
    System.Management.ManagementObject("Win32_LogicalMemoryConfiguration.Name=\"LogicalMemoryConfiguration\""); 

Console.WriteLine("Total virtual memory: {0}",logicalMemory["TotalVirtualMemory"].ToString()); 

在我的工作體系,這個輸出2809756.

這個對象也支持這些特性

uint32 AvailableVirtualMemory; //in Kb 
    string Caption; 
    string Description; 
    string Name;     //NO LONGER SUPPORTED 
    string SettingID; 
    uint32 TotalPageFileSpace;  //in Kb 
    uint32 TotalPhysicalMemory;  //in Kb 
    uint32 TotalVirtualMemory;  //in Kb 

我希望這會有所幫助。