您的位置:首页 > 其它

如何得到程序运行时占用的内存?

2008-04-18 14:03 323 查看
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;




typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;

2. 打印内存占用的函数可以写为




bool PrintMemoryInfo( int stage/**//*DWORD processID*/ )




...{


PROCESS_MEMORY_COUNTERS pmc;


FILE* fp = fopen("MemoryUse.log", "at+");




switch(stage)




...{


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;


}




if ( GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)) )




...{


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 );


}




fclose(fp);




return true;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: