最近翻出以前做过的Windows系统性能统计程序,这个程序可以统计系统中的CPU使用情况,内存使用情况以及网络流量。现在将其整理一下(共有三篇),希望对大家有所帮助。

目录如下:

1.《Windows系统CPU内存网络性能统计第一篇 内存

2.《Windows系统CPU内存网络性能统计第二篇 CPU》

3.《Windows系统CPU内存网络性能统计第三篇网络流量》

本篇将介绍统计系统内存使用情况,包括内存使用率、总物理内存大小、可用物理内存大小、总虚拟内存大小,可用虚拟内存大小等等。统计系统内存使用情况是非常简单的,直接使用GlobalMemoryStatus函数进行查询就可以了。其函数原型如下:

void WINAPIGlobalMemoryStatus(

__out         LPMEMORYSTATUS lpBuffer

);

这个函数将传出MEMORYSTATUS类型的结构体,该结构体就描述了系统中内存的使用情况。详细可以见代码:

  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. MEMORYSTATUS memStatus;
  12. GlobalMemoryStatus(&memStatus);
  13. printf ("当前内存使用率: %d%%\n", memStatus.dwMemoryLoad);
  14. printf ("系统物理内存总量: %dKB (%dMB)\n", memStatus.dwTotalPhys / KB_DIV, memStatus.dwTotalPhys / MB_DIV);
  15. printf ("当前可用物理内存: %dKB (%dMB)\n", memStatus.dwAvailPhys / KB_DIV, memStatus.dwAvailPhys / MB_DIV);
  16. printf ("系统虚拟内存总量: %dKB (%dMB)\n", memStatus.dwTotalVirtual / KB_DIV, memStatus.dwTotalVirtual / MB_DIV);
  17. printf ("当前空闲虚拟内存: %dKB (%dMB)\n", memStatus.dwAvailVirtual / KB_DIV, memStatus.dwAvailVirtual / MB_DIV);
  18. printf ("系统页面文件总量: %dKB (%dMB)\n", memStatus.dwTotalPageFile / KB_DIV, memStatus.dwTotalPageFile / MB_DIV);
  19. printf ("当前空闲页面文件: %dKB (%dMB)\n", memStatus.dwAvailPageFile / KB_DIV, memStatus.dwAvailPageFile / MB_DIV);
  20. return 0;
  21. }

在本机上运行结果如下,呵呵,2G内存对XP系统来说还是很够用的。换成Win7肯定不会有这么可用内存。

由于MEMORYSTATUS结构体对于内存大小是用DWORD来存储的,DWORD只有4个字节,最大为4G。因此当系统的内存大于4GB时肯定会产生一些问题的。因此Windows系统提供了另一个函数——GlobalMemoryStatusEx,其函数原型如下:

BOOLWINAPIGlobalMemoryStatusEx(

__in_out      LPMEMORYSTATUSEXlpBuffer

);

这个函数即前面的GlobalMemoryStatus函数的增强版。它将传出MEMORYSTATUSEX类型的结构体,这个结构体会使用DWORDLONG类型的变量来描述内存的大小,DWORDLONG与__int64类似,占8字节。下面也给出使用GlobalMemoryStatusEx函数来统计内存信息的源代码:

  1. // Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatusEx
  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内存网络性能统计第一篇 内存 GlobalMemoryStatusEx\n");
  10. printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");
  11. MEMORYSTATUSEX memStatusEx;
  12. memStatusEx.dwLength = sizeof(memStatusEx);
  13. if (GlobalMemoryStatusEx(&memStatusEx))
  14. {
  15. printf ("当前内存使用率: %d%%\n", memStatusEx.dwMemoryLoad);
  16. printf ("系统物理内存总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPhys / KB_DIV, memStatusEx.ullTotalPhys / MB_DIV);
  17. printf ("当前可用物理内存: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPhys / KB_DIV, memStatusEx.ullAvailPhys / MB_DIV);
  18. printf ("系统虚拟内存总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalVirtual / KB_DIV, memStatusEx.ullTotalVirtual / MB_DIV);
  19. printf ("当前空闲虚拟内存: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailVirtual / KB_DIV, memStatusEx.ullAvailVirtual / MB_DIV);
  20. printf ("系统页面文件总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPageFile / KB_DIV, memStatusEx.ullTotalPageFile / MB_DIV);
  21. printf ("当前空闲页面文件: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPageFile / KB_DIV, memStatusEx.ullAvailPageFile / MB_DIV);
  22. }
  23. return 0;
  24. }

运行结果如下:

本篇文章介绍和示范了GlobalMemoryStatus和GlobalMemoryStatusEx函数来查询内存使用情况。下面二篇《Windows系统CPU内存网络性能统计第二篇 CPU》和《Windows系统CPU内存网络性能统计第三篇 网络流量》将分别介绍查询CPU使用情况和网络流量统计,欢迎继续浏览。

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

Windows系统CPU内存网络性能统计第一篇 内存的更多相关文章

  1. linux0.11内核源码剖析:第一篇 内存管理、memory.c【转】

    转自:http://www.cnblogs.com/v-July-v/archive/2011/01/06/1983695.html linux0.11内核源码剖析第一篇:memory.c July  ...

  2. C/C++获取Windows系统CPU和内存及硬盘使用情况

    //1.获取Windows系统内存使用率 //windows 内存 使用率 DWORD getWin_MemUsage(){ MEMORYSTATUS ms; ::GlobalMemoryStatus ...

  3. PHP 性能分析第一篇: Xhprof & Xhgui 介绍

    [前言]这是国外知名博主 Davey Shafik所撰写的 PHP 应用性能分析系列的第一篇,阅读第二篇可深入了解 xhgui,第三篇则关注于性能调优实践. 什么是性能分析? 性能分析是衡量应用程序在 ...

  4. PHP 性能分析第一篇: Intro to Xhprof & Xhgui

    [前言]这是国外知名博主 Davey Shafik所撰写的 PHP 应用性能分析系列的第一篇,阅读第二篇可深入了解 xhgui,第三篇则关注于性能调优实践. 原文链接如下: https://blog. ...

  5. 索引列上的统计 <第一篇>

    一.索引在查询优化中的角色 SQL Server的查询优化器是基于开销的优化器.它通过确认选择性.数据的唯一性以及过滤数据(通过WHERE或JOIN子句)所使用的列来决定最佳的数据访问机制.统计与索引 ...

  6. 【LWJGL3】LWJGL3的内存分配设计,第一篇,栈上分配

    简介 LWJGL (Lightweight Java Game Library 3),是一个支持OpenGL,OpenAl,Opengl ES,Vulkan等的Java绑定库.<我的世界> ...

  7. Windows系统CPU和内存状态实时查询(Java)

    一.背景 需要查询Windows服务器的CPU和内存状态. Linux系统查询CPU和内存状态很简单,一个top命令搞定,Windows就稍微麻烦一些了. 经过资料查找,发现jdk目前不能直接查询系统 ...

  8. perfmon——使用windows系统自带的性能监视器监控进程信息

    第一次使用perfmon监控应用进程的信息,步骤总结如下: 第一部分 性能监视器 1.快捷键Win+R打开运行界面,输入“perfmon”命令后回车即可打开windows的性能监视器 2.点击“性能监 ...

  9. Windows学习总结(9)——Windows系统常用的网络控制指令

    ping 命令式用来测试TCP/IP 网络是否畅通或者网络连接速度的命 令,其原理是根据计算机唯一标示的IP 地址,当用户给目的地址发 送一个数据包时,对方就会返回一个同样大小的数据包,根据返回的 数 ...

随机推荐

  1. Android自己定义控件2-简单的写字板控件

    概述 上一篇文章我们对自己定义控件进行了一个大体的知识介绍. 今天就来学习自己定义一个简单的写字板控件. 先来看看效果图 就是简单的依据手指写下的轨迹去画出内容 实现 在上一篇文章里提到了androi ...

  2. [Node.js] Take Screenshots of Multiple Dimensions for Responsive Sites using Nightmare

    When developing responsive websites, you will constantly be resizing your browser to make sure your ...

  3. Deepin系统更新apt-get源

    1.复制原文件备份sudo cp /etc/apt/source.list /etc/apt/source.list.bak2.编辑源列表文件sudo vim /etc/apt/source.list ...

  4. toLocaleDateString()

    在处理时间问题的时候,遇到了一个bug,关于toLocaleDateString()在不同浏览器下的解析结果. 代码如下 浏览器解析结果如下 可以看到谷歌,火狐等浏览器的输出结果是这种格式的 *201 ...

  5. gitlab+jenkins+pm2+rsync实现node的自动化部署

    环境配置 jenkins java环境 yum install -y java 安装jenkins wget -O /etc/yum.repos.d/jenkins.repo http://pkg.j ...

  6. Double prefix overrides to provide 16-bit operand size in a 32/64 operating mode

    A processor supports an operating mode in which the default address size is greater than 32 bits and ...

  7. mysql创建应用账号

    -- 赋予某个库全部权限use mysql;grant all privileges on test_db.* to test_user@'%' identified by 'Aa123456';gr ...

  8. .NETCore 实现容器化Docker与私有镜像仓库管理

    原文:.NETCore 实现容器化Docker与私有镜像仓库管理 一.Docker介绍 Docker是用Go语言编写基于Linux操作系统的一些特性开发的,其提供了操作系统级别的抽象,是一种容器管理技 ...

  9. android 连接USB按power键锁屏2声锁屏音

    alps\frameworks\base\packages\Keyguard\src\com\android\keyguard\KeyguardViewMediator.java #1384 行左右: ...

  10. 一个封装比较完整的FTP类——clsFTP

    前几天,看见园子里面的博友写了一个支持断点续传的FTP类,一时技痒,干脆写了个更完整的clsFtp类.只是我写这个clsFtp不是支持断点续传的目的,而是为了封装FTP几个基本常用的操作接口. 功能 ...