日期:2014-05-18  浏览次数:21167 次

如何通过WMI查询电脑当前可用内存大小
现在已经查到电脑总的物理内存大小了,查询代码如下:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", 
"SELECT * FROM Win32_LogicalMemoryConfiguration"); 

foreach (ManagementObject queryObj in searcher.Get())
{
  MessageBox.Show(queryObj["TotalPhysicalMemory"].ToString());
}

但不知道如何查当前剩余可用内存大小,网上看到的方法时查所有已用的,用总内存大小减去已用的来得到,查询语句为:
Select AvailableMBytes from Win32_PerfRawData_PerfOS_Memory

但我将查询总内大小的语句改为上面这语句后,弹出MessageBox.Show(queryObj["AvailableMBytes"].ToString()),程序报错,显示“没效类别”。

请问是怎么回事??正确查询剩余可用内存大小是要怎么查??


------解决方案--------------------
用 winAPI 方式获得
C# code
// 定义结构和方法
[StructLayout(LayoutKind.Sequential)]
private struct _MEMORYSTATUS
{
    public uint dwLength;
    public uint dwMemoryLoad;
    public uint dwTotalPhys;
    public uint dwAvailPhys;
    public uint dwTotalPageFile;
    public uint dwAvailPageFile;
    public uint dwTotalVirtual;
    public uint dwAvailVirtual;
}

[DllImport("Kernel32.dll", CallingConvention = CallingConvention.StdCall)]
private static extern void GlobalMemoryStatus(ref _MEMORYSTATUS lpBuffer);

// 调用代码
_MEMORYSTATUS ms = new _MEMORYSTATUS();
GlobalMemoryStatus(ref ms);
uint 总物理内存 = ms.dwTotalPhys;
uint 可用物理内存 = ms.dwAvailPhys;