|
最近需要做了一些性能方面的测试工作,主要都是些关于软件的CPU使用、内存使用等等的一些统计。本人在这方面是个小白,在网上一顿神找,消化了各位高人的经验并总结记录了一下,以免忘光。
本文记录了一些Windows下内存使用统计的心得。先看代码(忘了从哪找来的了)。代码很简单:
void PrintMemoryInfo( HANDLE hProcess,DWORD processID ) { PROCESS_MEMORY_COUNTERS pmc;
// Print the process identifier.
printf( "/nProcess ID: %u/n", processID );
if (NULL == hProcess) return;
if ( GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) ) { printf( "/tPageFaultCount: 0x%08X/n", pmc.PageFaultCount ); printf( "/tPeakWorkingSetSize: 0x%08X/n", pmc.PeakWorkingSetSize ); printf( "/tWorkingSetSize: 0x%08X/n", pmc.WorkingSetSize ); printf( "/tQuotaPeakPagedPoolUsage: 0x%08X/n", pmc.QuotaPeakPagedPoolUsage ); printf( "/tQuotaPagedPoolUsage: 0x%08X/n", pmc.QuotaPagedPoolUsage ); printf( "/tQuotaPeakNonPagedPoolUsage: 0x%08X/n", pmc.QuotaPeakNonPagedPoolUsage ); printf( "/tQuotaNonPagedPoolUsage: 0x%08X/n", pmc.QuotaNonPagedPoolUsage ); printf( "/tPagefileUsage: 0x%08X/n", pmc.PagefileUsage ); printf( "/tPeakPagefileUsage: 0x%08X/n", pmc.PeakPagefileUsage ); }
}
int main(void) { DWORD spid = 0; if (std::cin>>spid) { std::cout<<"需要侦测Pid为 "<<spid<<"的性能状况"<<std::cin; } CurrentProcessId=spid; HANDLE currentProcessHandle; currentProcessHandle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, CurrentProcessId); HANDLE HANDLEFOO = CreateThread(NULL,0,countNumber,NULL,NULL,NULL); GetAllCurrentProcess(); while(true) {
PrintMemoryInfo(currentProcessHandle,CurrentProcessId); Sleep(500); } CloseHandle( currentProcessHandle );
return 0; }
编译运行上面的程序,输入需要查看的进程pid,程序便会循环打印所选进程的内存信息:
可惜传不了图片,要不然就很直观了。简单说一下吧,在Windows任务管理器中点击“查看”->“选择列”,你可以把内存相关的选项都打上勾,
PageFaultCount: 0x000071F1 页面错误 29169 PeakWorkingSetSize: 0x03580000 高峰内存使用 54784k WorkingSetSize: 0x006D2000 内存使用 6984k QuotaPeakPagedPoolUsage: 0x0000ED1C 页面缓冲池峰值 QuotaPagedPoolUsage: 0x0000EB1C 页面缓冲池 58k QuotaPeakNonPagedPoolUsage: 0x014D32F8 非页面缓冲池峰值 QuotaNonPagedPoolUsage: 0x00003828 非页面缓冲池 14k PagefileUsage: 0x022C6000 虚拟内存大小 35608k PeakPagefileUsage: 0x03311000 虚拟内存峰值
以上单位均为字节(Bytes)。
|