内存使用情况查看类

 内存使用情况查看类

class CMemoryUserge
{
protected:
  typedef struct _MEMORYSTATUS_EX {
    DWORD dwLength;             // sizeof(MEMORYSTATUSVLM) 
    DWORD dwMemoryLoad;         // percent of memory in use 
    DWORDLONG dwTotalPhys;     // bytes of physical memory 
    DWORDLONG dwAvailPhys;     // free physical memory bytes 
    DWORDLONG dwTotalPageFile; // bytes of paging file 
    DWORDLONG dwAvailPageFile; // free bytes of paging file 
    DWORDLONG dwTotalVirtual;  // user bytes of address space 
    DWORDLONG dwAvailVirtual;  // free user bytes 
    DWORDLONG dwAvailExtendedVirtual;
  } MEMORYSTATUS_EX, *LPMEMORYSTATUS_EX; 

  typedef VOID (WINAPI *GLOBALMEMORYSTATUSEX)( LPMEMORYSTATUS_EX lpBuffer );
  GLOBALMEMORYSTATUSEX pGlobalMemoryStatusVlm;
  MEMORYSTATUS_EX memStatus, memSave;
  
  CString PrintfULLData(ULONGLONG uLL)
  {
    char buffer[129]={0}; 
    _ui64toa(uLL, buffer, 10);
    
    char buffer2[129]={0};
    int i=0;
    int j=0;
    int k=strlen(buffer);
    int l=(k/3) + ((k%3)?1:0);
    int m=(k-l*3) > 0 ? (k-l*3):(3+(k-l*3));
    while(k--)
    {
      buffer2[i++] = buffer[j++];
      if((--m % 3 == 0) && k)
      {
        buffer2[i++] = ',';
        m=3;
      }
    }
    buffer2[i] = '\0';

    //补足XX位
    {
      k = strlen(buffer2);
      j = 18-k;
      if(j > 0)
      {
        strcpy(buffer, buffer2);
        memset(buffer2, 0, sizeof(buffer2));
        for(i=0; i<j; i++)
          buffer2[i] = ' ';
        strcat(buffer2, buffer);
      }      
    }
    
    return CString(buffer2);
  }

public:
  CMemoryUserge()
  {
    pGlobalMemoryStatusVlm = NULL;
    
    HMODULE hLib = LoadLibrary(_T("kernel32.dll"));
    if(hLib)
    {
      pGlobalMemoryStatusVlm = 
        (GLOBALMEMORYSTATUSEX)GetProcAddress(hLib, "GlobalMemoryStatusEx");
      FreeLibrary(hLib);
    }

    memset(&memSave, 0, sizeof(memSave));
    memset(&memStatus, 0, sizeof(memStatus));
  }

public:
  BOOL GetMemoryInfo(CString & szMemInfo, BOOL bForce=FALSE)
  {
    BOOL bUpdate=FALSE;
    
    if(pGlobalMemoryStatusVlm)
    {
      memStatus.dwLength = sizeof(memStatus);
      pGlobalMemoryStatusVlm( &memStatus );
    }
    else
    {
      MEMORYSTATUS tmpStatus={0};
      tmpStatus.dwLength = sizeof(tmpStatus);
      GlobalMemoryStatus( &tmpStatus );

      memStatus.dwMemoryLoad = tmpStatus.dwMemoryLoad;         // percent of memory in use 
      memStatus.dwTotalPhys = tmpStatus.dwTotalPhys;     // bytes of physical memory 
      memStatus.dwAvailPhys = tmpStatus.dwAvailPhys;     // free physical memory bytes 
      memStatus.dwTotalPageFile = tmpStatus.dwTotalPageFile; // bytes of paging file 
      memStatus.dwAvailPageFile = tmpStatus.dwAvailPageFile; // free bytes of paging file 
      memStatus.dwTotalVirtual = tmpStatus.dwTotalVirtual;  // user bytes of address space 
      memStatus.dwAvailVirtual = tmpStatus.dwAvailVirtual;  // free user bytes 
      memStatus.dwAvailExtendedVirtual = 0;
    }

    if(bForce || memcmp(&memSave, &memStatus, sizeof(memSave)))
    {
      szMemInfo.Format(
        _T("memory in use = %lu%%\r\n")
        _T("total physical memory       = %s\r\n")
        _T("free physical memory        = %s\r\n")
        _T("total bytes of paging file  = %s\r\n")
        _T("free bytes of paging file   = %s\r\n")
        _T("user bytes of address space = %s\r\n")
        _T("free in virtual address     = %s\r\n"),
        memStatus.dwMemoryLoad,
        PrintfULLData(memStatus.dwTotalPhys),
        PrintfULLData(memStatus.dwAvailPhys),
        PrintfULLData(memStatus.dwTotalPageFile),
        PrintfULLData(memStatus.dwAvailPageFile),
        PrintfULLData(memStatus.dwTotalVirtual),
        PrintfULLData(memStatus.dwAvailVirtual)
        );
      
      memSave = memStatus;
      bUpdate = TRUE;
    }
    
    return bUpdate;
  }

};


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值