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资源及内存,可以放到后台运行。