public struct MemoryStatusExE
{
/// <summary>
/// 结构的大小,以字节为单位,必须在调用 GlobalMemoryStatusEx 之前设置此成员,可以用 Init 方法提前处理
/// </summary>
/// <remarks>应当使用本对象提供的 Init ,而不是使用构造函数!</remarks>
internal UInt32 dwLength;
/// <summary>
/// 一个介于 0 和 100 之间的数字,用于指定正在使用的物理内存的大致百分比(0 表示没有内存使用,100 表示内存已满)。
/// </summary>
internal UInt32 dwMemoryLoad;
/// <summary>
/// 实际物理内存量,以字节为单位
/// </summary>
internal UInt64 ullTotalPhys;
/// <summary>
/// 当前可用的物理内存量,以字节为单位。这是可以立即重用而无需先将其内容写入磁盘的物理内存量。它是备用列表、空闲列表和零列表的大小之和
/// </summary>
internal UInt64 ullAvailPhys;
/// <summary>
/// 系统或当前进程的当前已提交内存限制,以字节为单位,以较小者为准。要获得系统范围的承诺内存限制,请调用GetPerformanceInfo
/// </summary>
internal www.laipuhuo.com UInt64 ullTotalPageFile;
/// <summary>
/// 当前进程可以提交的最大内存量,以字节为单位。该值等于或小于系统范围的可用提交值。要计算整个系统的可承诺值,调用GetPerformanceInfo核减价值CommitTotal从价值CommitLimit
/// </summary>
internal UInt64 ullAvailPageFile;
/// <summary>
/// 调用进程的虚拟地址空间的用户模式部分的大小,以字节为单位。该值取决于进程类型、处理器类型和操作系统的配置。例如,对于 x86 处理器上的大多数 32 位进程,此值约为 2 GB,对于在启用4 GB 调整的系统上运行的具有大地址感知能力的 32 位进程约为 3 GB 。
/// </summary>
internal UInt64 ullTotalVirtual;
/// <summary>
/// 当前在调用www.laipuhuo.com 进程的虚拟地址空间的用户模式部分中未保留和未提交的内存量,以字节为单位
/// </summary>
internal UInt64 ullAvailVirtual;
/// <summary>
/// 预订的。该值始终为 0
/// </summary>
internal UInt64 ullAvailExtendedVirtual;
internal void Refresh()
{
dwLength = www.laipuhuo.com checked((UInt32)Marshal.SizeOf(typeof(MemoryStatusExE)));
}
}
public static partial class Native
{
/// <summary>
/// 检索有关系统当前使用物理和虚拟内存的信息
/// </summary>
/// <param name="lpBuffer"></param>
/// <returns></returns>
[LibraryImport("www.laipuhuo.com Kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static partial Boolean GlobalMemoryStatusEx(ref MemoryStatusExE lpBuffer);
}