WinCE检测CPU负载及内存占用的方法(转载)

 

    通过CPU负载信息,可以判断程序运行环境是否稳定,帮助分析程序中是否有死循环,造成系统变慢。

  通过内存使用信息,可以评估程序内存占用情况,帮助分析程序中是否有内存泄漏的情况。 

CPU负载检测

  通过GetTickCount获得系统时间读数,通过GetIdleTime获得CPU空闲时间读数,通过计算它们之间的百分比,就可以获得CPU的负载。代码如下: 


  DWORD m_dwStartTick; 
  DWORD m_dwEndTick; 
  DWORD m_dwStartIdle; 
  DWORD m_dwEndIdle; 
  m_dwStartTick = GetTickCount(); 
  m_dwStartIdle = GetIdleTime(); 
  // Sleep(1000); 
  DWORD dwCpuIdle; 
  m_dwEndTick = GetTickCount(); 
  m_dwEndIdle = GetIdleTime(); 
  dwCpuIdle = ((100*(m_dwEndIdle - m_dwStartIdle)) / (m_dwEndTick - m_dwStartTick)); 
  RETAILMSG(1, (L'CPU:%d%%\r\n', 100 - dwCpuIdle));

 

内存占用检测

 

  CE中,内存一部分分配给系统使用,一部分分配给用户程序使用,这个分配的比例可以通过userinfo.txt配置文件中的Store字段来分配。 
  [SYSTEM] 
  Store='15'


  这里的15表示内存15%大小分配给系统使用,剩下85%分配给用户程序使用。详情请参考光盘《使用必读》文档。

 

  通过函数GlobalMemoryStatus,可以获得分配给用户程序的内存大小(字节为单位),及目前空余的大小。 

  MEMORYSTATUS memstatus; 
  GlobalMemoryStatus(&memstatus); 
  STORE_INFORMATION storeinfo; 
  GetStoreInformation(&storeinfo); 
  RETAILMSG(1, (L'MEM:%d%%\r\nuser: total%8dKB\r\n used%8dKB\r\n', 
  memstatus.dwMemoryLoad,memstatus.dwTotalPhys/1024,(memstatus.dwTotalPhys-memstatus.dwAvailPhys)/1024); 

  通过函数GetStoreInformation,可以获得分配给系统的内存大小(字节为单位),及目前空余的大小。 

  STORE_INFORMATION storeinfo; 
  GetStoreInformation(&storeinfo); 
  RETAILMSG(1, (L'system:total%8dKB\r\n used%8dKB\r\n\r\n', 
  storeinfo.dwStoreSize/1024, (storeinfo.dwStoreSize-storeinfo.dwFreeSize)/1024)); 

例程说明

 

  运行程序,程序会周期性读取CPU占用率及内存占用信息,显示在界面中。

                      

同时将信息打印到DEBUG调试串口,方便无显示屏主板使用。

该程序不会占用太多CPU资源及内存,可以放到后台运行。

 

posted @ 2016-06-07 11:53  dwtmjps  阅读(1668)  评论(0编辑  收藏  举报