织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>杂项技术>VC(MFC)>

VC & 监控进程内存使用情况

jackyhwei 发布于 2011-08-17 11:39 点击:次 
GetProcessMemoryInfo函数得到的PROCESS_MEMORY_COUNTERS结构体一直让人很困惑,尤其是将得到的值与任务管理器中显示的值对比时,更容易发现不吻合的情况。以下例程中有PROCESS_MEMORY_COUNTERS结构体各项与任务管理器中显示的对应关系。
TAG:

VC中使用GetProcessMemoryInfo函数得到的PROCESS_MEMORY_COUNTERS结构体一直让人很困惑,

尤其是将得到的值与任务管理器中显示的值对比时,更容易发现不吻合的情况。

以下例程中有PROCESS_MEMORY_COUNTERS结构体各项与任务管理器中显示的对应关系。

  1. //ProcessMemory.cpp   
  2.  
  3. //用法: 
  4. //    argv[1]是子进程的包含路径的完整可执行文件名 
  5. //    ProcessMemory notepad 
  6.  
  7. //编译: 
  8. //    cl ProcessMemory.cpp   
  9.    
  10. //功能:    
  11. //    获取子进程的内存使用情况 
  12.    
  13.    
  14. #include <stdio.h>    
  15. #include <windows.h> 
  16. #include <psapi.h> 
  17. #pragma comment(lib, "psapi.lib")  
  18.  
  19. int main(int argc, char *argv[])    
  20.     //CreateProcess的第一个参数    
  21.     STARTUPINFO StartupInfo = {0};    
  22.     StartupInfo.cb = sizeof(STARTUPINFO);  
  23.    
  24.    
  25.     //CreateProcess的第二个参数    
  26.     PROCESS_INFORMATION ProcessInfo = {0};    
  27.    
  28.    
  29.     CreateProcess(NULL, argv[1], NULL, NULL, TRUE, NULL, NULL
  30. , NULL, &StartupInfo, &ProcessInfo); 
  31.  
  32.  
  33.     //作用为:子进程运行结束后,查看它的内存使用情况。 
  34.     //    此时,所有非Peak的项均为0,所有Peak项显示运行期间的峰值 
  35.     //如果想在子进程结束之前监控它的内存使用情况,可以将这句替换为 
  36.     //    Sleep(1000); 
  37.     //    作用为:子进程运行1000毫秒之后,查看它的内存使用情况 
  38.     WaitForSingleObject(ProcessInfo.hProcess, INFINITE); 
  39.  
  40.  
  41.     PROCESS_MEMORY_COUNTERS pmc; 
  42.     GetProcessMemoryInfo(ProcessInfo.hProcess, &pmc, sizeof(pmc)); 
  43.     //以下各项均以KB为单位 
  44.     //在任务管理器中显示为:峰值工作设置(内存) 
  45.     printf("%d/n", pmc.PeakWorkingSetSize/1024); 
  46.     //在任务管理器中显示为:工作设置(内存) 
  47.     printf("%d/n", pmc.WorkingSetSize/1024); 
  48.     printf("%d/n", pmc.QuotaPeakPagedPoolUsage/1024); 
  49.     //在任务管理器中显示为:分页池 
  50.     printf("%d/n", pmc.QuotaPagedPoolUsage/1024); 
  51.     printf("%d/n", pmc.QuotaPeakNonPagedPoolUsage/1024); 
  52.     //在任务管理器中显示为:非页面缓冲池 
  53.     printf("%d/n", pmc.QuotaNonPagedPoolUsage/1024); 
  54.     printf("%d/n", pmc.PeakPagefileUsage/1024); 
  55.     //在任务管理器中显示为:内存(专用工作集) //这是任务管理器的默认显示项! 
  56.     printf("%d/n", pmc.PagefileUsage/1024); 
  57.  
  58.  
  59.     return 0;    

 

(endlessroad1991)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201108/14869.html]
本文出处:blog.csdn.net/endlessroad1991 作者:endlessroad1991
顶一下
(0)
0%
踩一下
(3)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容