如何得到程序运行时占用的内存?
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;
}
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;
}
相关文章推荐
- Qt使用windows API获取程序运行时占用内存 good
- php测试程序运行时间和占用内存情况
- How To Get Application Path,And How To Get The Path's Directory,File Name,And Type Info(如何得到运行程序的路径,以及如何得到路径的文件夹,文件名,以及类型等等信息)
- 如何压缩程序占用内存的方法
- 如何查看iOS程序运行时所占的内存大小
- VC6.0下怎样查看程序的运行时间及内存占用情况
- java程序运行时对象是怎么进行放置安排? 内存是如何分配的呢?
- 如何优化app的运行内存占用
- centos服务器如何用命令查看哪个程序内存占用情况,硬盘空间占用
- 如何提高《个人助手》的运行速度,减少内存占用!
- vc下获取程序的运行时间和占用内存
- 紧急求助国内外大侠:如何编写程序得到正在运行的ppt的当前页码和运行时间?
- linux下,一个运行中的程序,究竟占用了多少内存?
- linux下,一个运行中的程序,究竟占用了多少内存
- 如何运行内存中的程序
- linux下,一个运行中的程序,究竟占用了多少内存?
- String和StringBuffer占用内存情况,及修改程序运行时的栈内存
- linux下,一个运行中的程序,究竟占用了多少内存?
- 如何减少内存分配频率,提高程序运行效率
- 如何获知PHP程序占用多少内存(复制)