Windows系統CPU記憶體網路效能統計第一篇 記憶體

來源:互聯網
上載者:User

標籤:main   return   int   虛擬   detail   體會   blank   glob   空閑   

最近翻出以前做過的Windows系統效能統計程式,這個程式可以統計系統中的CPU使用方式,記憶體使用量情況以及網路流量。現在將其整理一下(共有三篇),希望對大家有所協助。

目錄如下:

1.《Windows系統CPU記憶體網路效能統計第一篇 記憶體》

2.《Windows系統CPU記憶體網路效能統計第二篇 CPU》

3.《Windows系統CPU記憶體網路效能統計第三篇網路流量》

 

本篇將介紹統計系統記憶體使用量情況,包括記憶體使用量率、總實體記憶體大小、可用實體記憶體大小、總虛擬記憶體大小,可用虛擬記憶體大小等等。統計系統記憶體使用量情況是非常簡單的,直接使用GlobalMemoryStatus函數進行查詢就可以了。其函數原型如下:

void WINAPIGlobalMemoryStatus(

    __out         LPMEMORYSTATUS lpBuffer

);

這個函數將傳出MEMORYSTATUS類型的結構體,該結構體就描述了系統中記憶體的使用方式。詳細可以見代碼:

[cpp] view plain copy 
  1. // Windows系統CPU記憶體網路效能統計第一篇 記憶體 GlobalMemoryStatus  
  2. //By MoreWindows-(http://blog.csdn.net/MoreWindows)  
  3. #include <stdio.h>  
  4. #include <windows.h>  
  5. const int KB_DIV = 1024;  
  6. const int MB_DIV = 1024 * 1024;  
  7. int main()  
  8. {  
  9.     printf("    Windows系統CPU記憶體網路效能統計第一篇 記憶體 GlobalMemoryStatus\n");        
  10.     printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");   
  11.   
  12.     MEMORYSTATUS memStatus;  
  13.     GlobalMemoryStatus(&memStatus);  
  14.       
  15.   
  16.     printf ("當前記憶體使用量率: %d%%\n", memStatus.dwMemoryLoad);  
  17.   
  18.     printf ("系統實體記憶體總量: %dKB (%dMB)\n", memStatus.dwTotalPhys / KB_DIV, memStatus.dwTotalPhys / MB_DIV);  
  19.     printf ("當前可用實體記憶體: %dKB (%dMB)\n", memStatus.dwAvailPhys / KB_DIV, memStatus.dwAvailPhys / MB_DIV);  
  20.       
  21.     printf ("系統虛擬記憶體總量: %dKB (%dMB)\n", memStatus.dwTotalVirtual / KB_DIV, memStatus.dwTotalVirtual / MB_DIV);  
  22.     printf ("當前空閑虛擬記憶體: %dKB (%dMB)\n", memStatus.dwAvailVirtual / KB_DIV, memStatus.dwAvailVirtual / MB_DIV);  
  23.   
  24.     printf ("系統分頁檔總量: %dKB (%dMB)\n", memStatus.dwTotalPageFile / KB_DIV, memStatus.dwTotalPageFile / MB_DIV);  
  25.     printf ("當前空閑分頁檔: %dKB (%dMB)\n", memStatus.dwAvailPageFile / KB_DIV, memStatus.dwAvailPageFile / MB_DIV);  
  26.     return 0;  
  27. }  

在本機上運行結果如下,呵呵,2G記憶體對XP系統來說還是很夠用的。換成Win7肯定不會有這麼可用記憶體。

 

 

由於MEMORYSTATUS結構體對於記憶體大小是用DWORD來儲存的,DWORD只有4個位元組,最大為4G。因此當系統的記憶體大於4GB時肯定會產生一些問題的。因此Windows系統提供了另一個函數——GlobalMemoryStatusEx,其函數原型如下:

BOOLWINAPIGlobalMemoryStatusEx(

    __in_out      LPMEMORYSTATUSEXlpBuffer

);

這個函數即前面的GlobalMemoryStatus函數的增強版。它將傳出MEMORYSTATUSEX類型的結構體,這個結構體會使用DWORDLONG類型的變數來描述記憶體的大小,DWORDLONG與__int64類似,佔8位元組。下面也給出使用GlobalMemoryStatusEx函數來統計記憶體資訊的原始碼:

[cpp] view plain copy 
  1. // Windows系統CPU記憶體網路效能統計第一篇 記憶體 GlobalMemoryStatusEx  
  2. //By MoreWindows-(http://blog.csdn.net/MoreWindows)  
  3. #include <stdio.h>  
  4. #include <windows.h>  
  5.   
  6. const int KB_DIV = 1024;  
  7. const int MB_DIV = 1024 * 1024;  
  8.   
  9.   
  10. int main()  
  11. {  
  12.     printf("    Windows系統CPU記憶體網路效能統計第一篇 記憶體 GlobalMemoryStatusEx\n");        
  13.     printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");   
  14.   
  15.     MEMORYSTATUSEX memStatusEx;   
  16.     memStatusEx.dwLength = sizeof(memStatusEx);  
  17.     if (GlobalMemoryStatusEx(&memStatusEx))  
  18.     {  
  19.         printf ("當前記憶體使用量率: %d%%\n", memStatusEx.dwMemoryLoad);  
  20.   
  21.         printf ("系統實體記憶體總量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPhys / KB_DIV, memStatusEx.ullTotalPhys / MB_DIV);  
  22.         printf ("當前可用實體記憶體: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPhys / KB_DIV, memStatusEx.ullAvailPhys / MB_DIV);  
  23.   
  24.         printf ("系統虛擬記憶體總量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalVirtual / KB_DIV, memStatusEx.ullTotalVirtual / MB_DIV);  
  25.         printf ("當前空閑虛擬記憶體: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailVirtual / KB_DIV, memStatusEx.ullAvailVirtual / MB_DIV);  
  26.   
  27.         printf ("系統分頁檔總量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPageFile / KB_DIV, memStatusEx.ullTotalPageFile / MB_DIV);  
  28.         printf ("當前空閑分頁檔: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPageFile / KB_DIV, memStatusEx.ullAvailPageFile / MB_DIV);  
  29.     }  
  30.     return 0;  
  31. }  

運行結果如下:

 

 

 

本篇文章介紹和示範了GlobalMemoryStatus和GlobalMemoryStatusEx函數來查詢記憶體使用量情況。下面二篇《Windows系統CPU記憶體網路效能統計第二篇 CPU》和《Windows系統CPU記憶體網路效能統計第三篇 網路流量》將分別介紹查詢CPU使用方式和網路流量統計,歡迎繼續瀏覽。

 

 

http://blog.csdn.net/morewindows/article/details/8459219

Windows系統CPU記憶體網路效能統計第一篇 記憶體

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.