PSAPI在Windows2000和windows XP中都提供,它包含的函数能够使得获取进程或设备驱动的信息更加容易。在MSDN中可以查找到PSAPI的详细信息。这里以占用内存为例。
1. 进程占用内存结构是:
typedef
struct
_PROCESS_MEMORY_COUNTERS
...
{
DWORD cb;
DWORD PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
}
PROCESS_MEMORY_COUNTERS;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
typedef PROCESS_MEMORY_COUNTERS
*
PPROCESS_MEMORY_COUNTERS;
2. 打印内存占用的函数可以写为
bool
PrintMemoryInfo(
int
stage
/**/
/*DWORD processID*/
)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
PROCESS_MEMORY_COUNTERS pmc;
FILE* fp = fopen("MemoryUse.log", "at+");
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
switch(stage)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
case 0: fprintf(fp, " before working : ");
break;
case 1: fprintf(fp, " after initialed : ");
break;
case 2: fprintf(fp, " during running : ");
break;
case 10: fprintf(fp, " after finishing : ");
break;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
if ( GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)) )
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
fprintf(fp, " PageFaultCount: %d ", pmc.PageFaultCount );
fprintf(fp, " PeakWorkingSetSize: %d M ", pmc.PeakWorkingSetSize/1024/1024 );
fprintf(fp, " WorkingSetSize: %d M ", pmc.WorkingSetSize/1024/1024 );
fprintf(fp, " QuotaPeakPagedPoolUsage: %d ", pmc.QuotaPeakPagedPoolUsage);
fprintf(fp, " QuotaPagedPoolUsage: %d ", pmc.QuotaPagedPoolUsage );
fprintf(fp, " QuotaPeakNonPagedPoolUsage: %d ", pmc.QuotaPeakNonPagedPoolUsage );
fprintf(fp, " QuotaNonPagedPoolUsage: %d ", pmc.QuotaNonPagedPoolUsage );
fprintf(fp, " PagefileUsage: %d M ", pmc.PagefileUsage/1024/1024 );
fprintf(fp, " PeakPagefileUsage: %d M ", pmc.PeakPagefileUsage/1024/1024 );
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
fclose(fp);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
return true;
}