怎么通过WMI查询电脑当前可用内存大小
如何通过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 方式获得
现在已经查到电脑总的物理内存大小了,查询代码如下:
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;