前引:系统内存(Memory)信息是类似如下表格的信息:
在设备上选择”Start – Setting – System – Memory - Main”可以看到有Storage和Program两项,严格意义上说这样划分和它的标题”Memory”并不符合,我想MS只是想告诉普通用户一些设备的基本信息。然而作为开发人员就不能这么简单的认为了。
在这之前我们需要了解一下Memory和Storage的区别,简单的说Memory(即上面的Program)就是RAM,而Storage就是ROM。如果您想明白的更透彻,参考:Mike Calligaro的RAM, ROM, NAND, NOR--That's A Lot Of Capital Letters...
获取系统的物理和虚拟内存。
void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer );RAPI 对应版本为:void CeGlobalMemoryStatus( LPMEMORYSTATUS lpmst );参数为MEMORYSTATUS类型,如下:typedef struct _MEMORYSTATUS { DWORD dwLength; // 结构体大小
DWORD dwMemoryLoad; // 内存使用百分比
WORD dwTotalPhys; // 物理内存总大小
DWORD dwAvailPhys; // 可用物理内存大小
DWORD dwTotalPageFile; // 可存储在页面文件的字节总大小
DWORD dwAvailPageFile; // 页面文件的可用字节大小
DWORD dwTotalVirtual; // 可提供给用户调用进程的虚拟内存字节大小
DWORD dwAvailVirtual; // 可提供给用户调用进程的可用虚拟内存字节大小} MEMORYSTATUS, *LPMEMORYSTATUS;注意: 在创建MEMORYSTATUS对象时需要将对象大小赋值给dwLength参数。PInvoke GlobalMemoryStatus
[DllImport("coredll.dll")]
public static extern void GlobalMemoryStatus(MEMORYSTATUS lpBuffer);
public class 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;
public MEMORYSTATUS()
{
dwLength = (uint)Marshal.SizeOf(this);
dwMemoryLoad = 0;
dwTotalPhys = 0;
dwAvailPhys = 0;
dwTotalPageFile = 0;
dwAvailPageFile = 0;
dwTotalVirtual = 0;
dwAvailVirtual = 0;
}
}
二 获取内核态对象存储和系统内存信息BOOL GetSystemMemoryDivision(LPDWORD lpdwStorePages, LPDWORD lpdwRamPages, LPDWORD lpdwPageSize);
注意: MSDN并不赞成使用该函数
PInvoke GetSystemMemoryDivision
[DllImport("coredll.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetSystemMemoryDivision(
ref uint lpdwStorePages, // 存储内存页面数
ref uint lpdwRamPages, // 程序内存页面数
ref uint lpdwPageSize // 页面大小
);
--------------------------------------------------
李森 – listen |
声明: Announce: |