春暖花开
雪化了,花开了,春天来了
posts - 149,comments - 125,trackbacks - 0
  如何获得单个进程所占内存的大小,也许很简单,通过GetProcessMemoryInfo可以轻松获得,然而那是在PC上。但在windows mobile 上,这个函数不存在,它的实现机制我也不太清楚。所以如何获得一个进程的占用内存大小,则需要另辟蹊径。不过目前,我还没有找到。
       我现在的方法,如下:
    
 1DWORD GetUsedMemory(DWORD pID)
 2{
 3    DWORD memUsage = 0;
 4    HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST, pID);
 5    if (INVALID_HANDLE_VALUE != hSnapShot)
 6    {
 7        HEAPLIST32 heapList;
 8        heapList.dwSize = sizeof(HEAPLIST32);
 9        BOOL  bOk = Heap32ListFirst(hSnapShot, &heapList);
10        for (; bOk; bOk = Heap32ListNext(hSnapShot, &heapList))
11        {
12            HEAPENTRY32  he;
13            he.dwSize = sizeof(HEAPENTRY32);
14            BOOL fOK = Heap32First(hSnapShot, &he, pID, heapList.th32HeapID);
15            for(; fOK; fOK = Heap32Next(hSnapShot, &he))
16            {
17                memUsage += he.dwBlockSize;
18            }

19        }

20
21
22
23        // 关闭快照句柄
24        CloseToolhelp32Snapshot(hSnapShot);
25    }
  
26
27    return memUsage;
28
29}

以上的这个方法与实际有出入。
        有没有更好的办法呢?希望研究过的和正在研究的人,或者感兴趣的人,能够指点一二,让我能够走出困惑。
posted on 2008-07-29 16:21 Sandy 阅读(1146) 评论(4)  编辑 收藏 引用

FeedBack:
# re: 单个进程所占内存的疑惑
2008-07-30 08:35 | aGAric
除了堆,程序还要占用其他一些内存,比如数据区,代码区,还要和其他程序一起共享一些dll的东西,此外还有栈内存。  回复  更多评论
  
# re: 单个进程所占内存的疑惑[未登录]
2008-07-30 09:04 | raof01
还有各种资源比如打开的文件,进程描述符,线程描述符等等。  回复  更多评论
  
# re: 单个进程所占内存的疑惑
2008-07-30 12:46 | qiyanhd

这个我也明白,有没有什么办法可以获得进程的这些信息呢?  回复  更多评论
  
# re: 单个进程所占内存的疑惑
2008-07-31 18:27 | Kroc
我也正在研究,但是应该是可以做的,FdcSoft的任务管理器中计算的就和Windows Mobile6.1自带的差不多。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理