我对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