我對VB類ComputerInfo中的屬性TotalVirtualMemory有疑問。我從幾臺不同的計算機上的代碼檢查了這個屬性,並且這個數字總是2047 MB。這很奇怪,因爲我知道這些計算機上的虛擬內存不同(〜1GB,〜2GB和〜3.5GB)。有誰知道爲什麼它是這樣的,有沒有其他方法來獲得總的和可用的虛擬內存?ComputerInfo.TotalVirtualMemory不正確
問候 丹尼爾
我對VB類ComputerInfo中的屬性TotalVirtualMemory有疑問。我從幾臺不同的計算機上的代碼檢查了這個屬性,並且這個數字總是2047 MB。這很奇怪,因爲我知道這些計算機上的虛擬內存不同(〜1GB,〜2GB和〜3.5GB)。有誰知道爲什麼它是這樣的,有沒有其他方法來獲得總的和可用的虛擬內存?ComputerInfo.TotalVirtualMemory不正確
問候 丹尼爾
您可以使用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);
}
我不知道,但它可能上衣的最大內存是32位程序可以分配(2GB)。你有沒有試過在64位機器上測試它?
這不是32位程序可以分配的最大內存*,它是32位程序可以同時映射到其*地址空間*的最大內存。 – OregonGhost 2009-10-02 12:09:23
這可能是一個情況下WMI會提供正確的信息給你。使用Scriptomatic瀏覽可用對象,Win32_PageFile對象可能包含您在做什麼。
編輯:這是Win32_OperatingSystem
,而不是Win32_ComputerSystem
,但否則湯姆弗雷的代碼是正確的。
ups,你是對的,謝謝你指出 – TJF 2009-10-02 13:57:50
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
我希望這會有所幫助。
如下面Martin所說,如果將「Win32_ComputerSystem」更改爲「Win32_OperatingSystem」,這就像一個魅力。謝謝! – 2009-10-02 12:40:58