Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1958403
  • 博文数量: 261
  • 博客积分: 8073
  • 博客等级: 中将
  • 技术积分: 2363
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-10 15:23
文章分类

全部博文(261)

文章存档

2013年(1)

2012年(1)

2011年(50)

2010年(34)

2009年(4)

2008年(17)

2007年(55)

2006年(99)

分类:

2010-09-14 14:14:06

上述有些价值观是很容易从相应的Win32 API的资料,我在这里只列出其中的完整性。 然而,其他人需要从性能数据助手库(PDH数字),这是一个有点“直观”,并采取一系列痛苦的反复试验开始工作取得的。 (至少我花了一段时间了,也许我一直只是有点愚蠢...

注:所有错误检查的清晰度已经从下面的代码省略。请检查返回代码...

 

 

  • 总的虚拟内存:

 


    #include "windows.h"
   
    MEMORYSTATUSEX memInfo;
    memInfo.dwLength = sizeof(MEMORYSTATUSEX);
    GlobalMemoryStatusEx(&memInfo);
    DWORDLONG totalVirtualMem = memInfo.ullTotalPageFile;

注:名称“TotalPageFile”是有些误导这里。 在现实中这个参数给“虚拟内存大小”,这是交换文件,另加安装的RAM的大小。

 

  • 目前使用的虚拟内存:

相同的代码,如“总的虚拟内存”,然后


    DWORDLONG virtualMemUsed = memInfo.ullTotalPageFile - memInfo.ullAvailPageFile;

 

 

  • 目前使用的虚拟内存的当前进程:

 


    #include "windows.h"
    #include "psapi.h"
   
    PROCESS_MEMORY_COUNTERS_EX pmc;
    GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc));
    SIZE_T virtualMemUsedByMe = pmc.PrivateUsage;

 

 

  • 总物理内存(RAM):

相同的代码,如“总的虚拟内存”,然后


    DWORDLONG totalPhysMem = memInfo.ullTotalPhys;

 

 

  • 目前使用的物理内存:

相同的代码,如“总的虚拟内存”,然后


    DWORDLONG physMemUsed = memInfo.ullTotalPhys - memInfo.ullAvailPhys;

 

 

  • 目前使用的物理内存的当前进程:

在“虚拟内存相同的代码目前使用的当前进程”,然后


    SIZE_T physMemUsedByMe = pmc.WorkingSetSize;

 

 

  • 目前使用的CPU

 


    #include "TCHAR.h"
    #include "pdh.h"
   
    static PDH_HQUERY cpuQuery;
    static PDH_HCOUNTER cpuTotal;
   
    void init(){
    PdhOpenQuery(NULL, NULL, &cpuQuery);
    PdhAddCounter(cpuQuery, L"\\Processor(_Total)\\% Processor Time", NULL, &cpuTotal);
    PdhCollectQueryData(cpuQuery);
    }
   
    double getCurrentValue(){
    PDH_FMT_COUNTERVALUE counterVal;
   
    PdhCollectQueryData(cpuQuery);
    PdhGetFormattedCounterValue(cpuTotal, PDH_FMT_DOUBLE, NULL, &counterVal);
    return counterVal.doubleValue;
    }

 

 

  • 目前使用的CPU的当前进程:

 


    #include "windows.h"
   
    static ULARGE_INTEGER lastCPU, lastSysCPU, lastUserCPU;
    static int numProcessors;
    static HANDLE self;
   
    void init(){
    SYSTEM_INFO sysInfo;
    FILETIME ftime, fsys, fuser;
   
    GetSystemInfo(&sysInfo);
    numProcessors = sysInfo.dwNumberOfProcessors;
   
    GetSystemTimeAsFileTime(&ftime);
    memcpy(&lastCPU, &ftime, sizeof(FILETIME));
   
    self = GetCurrentProcess();
    GetProcessTimes(self, &ftime, &ftime, &fsys, &fuser);
    memcpy(&lastSysCPU, &fsys, sizeof(FILETIME));
    memcpy(&lastUserCPU, &fuser, sizeof(FILETIME));
    }
   
    double getCurrentValue(){
    FILETIME ftime, fsys, fuser;
    ULARGE_INTEGER now, sys, user;
    double percent;
   
    GetSystemTimeAsFileTime(&ftime);
    memcpy(&now, &ftime, sizeof(FILETIME));
   
    GetProcessTimes(self, &ftime, &ftime, &fsys, &fuser);
    memcpy(&sys, &fsys, sizeof(FILETIME));
    memcpy(&user, &fuser, sizeof(FILETIME));
    percent = (sys.QuadPart - lastSysCPU.QuadPart) +
    (user.QuadPart - lastUserCPU.QuadPart);
    percent /= (now.QuadPart - lastCPU.QuadPart);
    percent /= numProcessors;
    lastCPU = now;
    lastUserCPU = user;
    lastSysCPU = sys;
   
    return percent * 100;
    }

阅读(1208) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~