使用C#,我想获取计算机拥有的RAM总量。
使用PerformanceCounter,我可以通过设置以下内容来获得可用内存的数量:
counter.CategoryName = "Memory";
counter.Countername = "Available MBytes";
但是我似乎找不到找到总内存量的方法。我将如何去做呢?
更新:
MagicKat:我在搜索时看到了,但没有用-“您是否缺少程序集或引用?”。我曾试图将其添加到引用中,但在那里看不到它。
最佳答案
Windows API函数 GlobalMemoryStatusEx
可以用p/invoke调用:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
private class MEMORYSTATUSEX
{
public uint dwLength;
public uint dwMemoryLoad;
public ulong ullTotalPhys;
public ulong ullAvailPhys;
public ulong ullTotalPageFile;
public ulong ullAvailPageFile;
public ulong ullTotalVirtual;
public ulong ullAvailVirtual;
public ulong ullAvailExtendedVirtual;
public MEMORYSTATUSEX()
{
this.dwLength = (uint)Marshal.SizeOf(typeof(NativeMethods.MEMORYSTATUSEX));
}
}
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);
然后使用像:ulong installedMemory;
MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX();
if( GlobalMemoryStatusEx( memStatus))
{
installedMemory = memStatus.ullTotalPhys;
}
或者,您可以使用WMI(受管但速度较慢)在TotalPhysicalMemory
类中查询Win32_ComputerSystem
。