2009-10-02 86 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 

我希望这会有所帮助。