static class Program
{
[StructLayout(LayoutKind.Sequential)]
public struct MemoryInfo
{
public uint Length;
public uint MemoryLoad;
public ulong TotalPhysical;//总内存
public ulong AvailablePhysical;//可用物理内存
public ulong TotalPageFile;
public ulong AvailablePageFile;
public ulong TotalVirtual;
public ulong AvailableVirtual;
}
[DllImport("kernel32")]
public static extern void GlobalMemoryStatus(ref MemoryInfo meminfo);
static void Main()
{
MemoryInfo MemInfo = new MemoryInfo();
GlobalMemoryStatus(ref MemInfo);
double totalMb = MemInfo.TotalPhysical / 1024 / 1024;
double avaliableMb = MemInfo.AvailablePhysical / 1024 / 1024;
Console.WriteLine($"物理内存共有:{totalMb}MB");
Console.WriteLine($"可使用的物理内存:{avaliableMb}MB");
Console.WriteLine($"剩余内存百分比:{Math.Round((avaliableMb / totalMb) * 100, 2)}");
}
}
API GlobalMemoryStatus获取内存信息,但该方法参数长度在32位和64位系统下不同,如定义错误拿不到正确值,区别如下:
//32位
public struct MemoryInfo
{
public uint Length;
public uint MemoryLoad;
public ulong TotalPhysical;//总内存
public ulong AvailablePhysical;//可用物理内存
public ulong TotalPageFile;
public ulong AvailablePageFile;
public ulong TotalVirtual;
public ulong AvailableVirtual;
}
//64位
public struct MemoryInfo
{
public uint Length;
public uint MemoryLoad;
public uint TotalPhysical;//总内存
public uint AvailablePhysical;//可用物理内存
public uint TotalPageFile;
public uint AvailablePageFile;
public uint TotalVirtual;
public uint AvailableVirtual;
}