Windows系统CPU内存网络性能统计第一篇 内存
最近翻出以前做过的Windows系统性能统计程序,这个程序可以统计系统中的CPU使用情况,内存使用情况以及网络流量。现在将其整理一下(共有三篇),希望对大家有所帮助。
目录如下:
1.《Windows系统CPU内存网络性能统计第一篇 内存》
2.《Windows系统CPU内存网络性能统计第二篇 CPU》
3.《Windows系统CPU内存网络性能统计第三篇网络流量》
本篇将介绍统计系统内存使用情况,包括内存使用率、总物理内存大小、可用物理内存大小、总虚拟内存大小,可用虚拟内存大小等等。统计系统内存使用情况是非常简单的,直接使用GlobalMemoryStatus函数进行查询就可以了。其函数原型如下:
void WINAPIGlobalMemoryStatus(
__out LPMEMORYSTATUS lpBuffer
);
这个函数将传出MEMORYSTATUS类型的结构体,该结构体就描述了系统中内存的使用情况。详细可以见代码:
- // Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatus
- //By MoreWindows-(http://blog.csdn.net/MoreWindows)
- #include <stdio.h>
- #include <windows.h>
- const int KB_DIV = 1024;
- const int MB_DIV = 1024 * 1024;
- int main()
- {
- printf(" Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatus\n");
- printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");
- MEMORYSTATUS memStatus;
- GlobalMemoryStatus(&memStatus);
- printf ("当前内存使用率: %d%%\n", memStatus.dwMemoryLoad);
- printf ("系统物理内存总量: %dKB (%dMB)\n", memStatus.dwTotalPhys / KB_DIV, memStatus.dwTotalPhys / MB_DIV);
- printf ("当前可用物理内存: %dKB (%dMB)\n", memStatus.dwAvailPhys / KB_DIV, memStatus.dwAvailPhys / MB_DIV);
- printf ("系统虚拟内存总量: %dKB (%dMB)\n", memStatus.dwTotalVirtual / KB_DIV, memStatus.dwTotalVirtual / MB_DIV);
- printf ("当前空闲虚拟内存: %dKB (%dMB)\n", memStatus.dwAvailVirtual / KB_DIV, memStatus.dwAvailVirtual / MB_DIV);
- printf ("系统页面文件总量: %dKB (%dMB)\n", memStatus.dwTotalPageFile / KB_DIV, memStatus.dwTotalPageFile / MB_DIV);
- printf ("当前空闲页面文件: %dKB (%dMB)\n", memStatus.dwAvailPageFile / KB_DIV, memStatus.dwAvailPageFile / MB_DIV);
- return 0;
- }
在本机上运行结果如下,呵呵,2G内存对XP系统来说还是很够用的。换成Win7肯定不会有这么可用内存。
由于MEMORYSTATUS结构体对于内存大小是用DWORD来存储的,DWORD只有4个字节,最大为4G。因此当系统的内存大于4GB时肯定会产生一些问题的。因此Windows系统提供了另一个函数——GlobalMemoryStatusEx,其函数原型如下:
BOOLWINAPIGlobalMemoryStatusEx(
__in_out LPMEMORYSTATUSEXlpBuffer
);
这个函数即前面的GlobalMemoryStatus函数的增强版。它将传出MEMORYSTATUSEX类型的结构体,这个结构体会使用DWORDLONG类型的变量来描述内存的大小,DWORDLONG与__int64类似,占8字节。下面也给出使用GlobalMemoryStatusEx函数来统计内存信息的源代码:
- // Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatusEx
- //By MoreWindows-(http://blog.csdn.net/MoreWindows)
- #include <stdio.h>
- #include <windows.h>
- const int KB_DIV = 1024;
- const int MB_DIV = 1024 * 1024;
- int main()
- {
- printf(" Windows系统CPU内存网络性能统计第一篇 内存 GlobalMemoryStatusEx\n");
- printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");
- MEMORYSTATUSEX memStatusEx;
- memStatusEx.dwLength = sizeof(memStatusEx);
- if (GlobalMemoryStatusEx(&memStatusEx))
- {
- printf ("当前内存使用率: %d%%\n", memStatusEx.dwMemoryLoad);
- printf ("系统物理内存总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPhys / KB_DIV, memStatusEx.ullTotalPhys / MB_DIV);
- printf ("当前可用物理内存: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPhys / KB_DIV, memStatusEx.ullAvailPhys / MB_DIV);
- printf ("系统虚拟内存总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalVirtual / KB_DIV, memStatusEx.ullTotalVirtual / MB_DIV);
- printf ("当前空闲虚拟内存: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailVirtual / KB_DIV, memStatusEx.ullAvailVirtual / MB_DIV);
- printf ("系统页面文件总量: \t%I64dKB (%I64dMB)\n", memStatusEx.ullTotalPageFile / KB_DIV, memStatusEx.ullTotalPageFile / MB_DIV);
- printf ("当前空闲页面文件: \t%I64dKB (%I64dMB)\n", memStatusEx.ullAvailPageFile / KB_DIV, memStatusEx.ullAvailPageFile / MB_DIV);
- }
- return 0;
- }
运行结果如下:
本篇文章介绍和示范了GlobalMemoryStatus和GlobalMemoryStatusEx函数来查询内存使用情况。下面二篇《Windows系统CPU内存网络性能统计第二篇 CPU》和《Windows系统CPU内存网络性能统计第三篇 网络流量》将分别介绍查询CPU使用情况和网络流量统计,欢迎继续浏览。
http://blog.csdn.net/morewindows/article/details/8459219
Windows系统CPU内存网络性能统计第一篇 内存的更多相关文章
- linux0.11内核源码剖析:第一篇 内存管理、memory.c【转】
转自:http://www.cnblogs.com/v-July-v/archive/2011/01/06/1983695.html linux0.11内核源码剖析第一篇:memory.c July ...
- C/C++获取Windows系统CPU和内存及硬盘使用情况
//1.获取Windows系统内存使用率 //windows 内存 使用率 DWORD getWin_MemUsage(){ MEMORYSTATUS ms; ::GlobalMemoryStatus ...
- PHP 性能分析第一篇: Xhprof & Xhgui 介绍
[前言]这是国外知名博主 Davey Shafik所撰写的 PHP 应用性能分析系列的第一篇,阅读第二篇可深入了解 xhgui,第三篇则关注于性能调优实践. 什么是性能分析? 性能分析是衡量应用程序在 ...
- PHP 性能分析第一篇: Intro to Xhprof & Xhgui
[前言]这是国外知名博主 Davey Shafik所撰写的 PHP 应用性能分析系列的第一篇,阅读第二篇可深入了解 xhgui,第三篇则关注于性能调优实践. 原文链接如下: https://blog. ...
- 索引列上的统计 <第一篇>
一.索引在查询优化中的角色 SQL Server的查询优化器是基于开销的优化器.它通过确认选择性.数据的唯一性以及过滤数据(通过WHERE或JOIN子句)所使用的列来决定最佳的数据访问机制.统计与索引 ...
- 【LWJGL3】LWJGL3的内存分配设计,第一篇,栈上分配
简介 LWJGL (Lightweight Java Game Library 3),是一个支持OpenGL,OpenAl,Opengl ES,Vulkan等的Java绑定库.<我的世界> ...
- Windows系统CPU和内存状态实时查询(Java)
一.背景 需要查询Windows服务器的CPU和内存状态. Linux系统查询CPU和内存状态很简单,一个top命令搞定,Windows就稍微麻烦一些了. 经过资料查找,发现jdk目前不能直接查询系统 ...
- perfmon——使用windows系统自带的性能监视器监控进程信息
第一次使用perfmon监控应用进程的信息,步骤总结如下: 第一部分 性能监视器 1.快捷键Win+R打开运行界面,输入“perfmon”命令后回车即可打开windows的性能监视器 2.点击“性能监 ...
- Windows学习总结(9)——Windows系统常用的网络控制指令
ping 命令式用来测试TCP/IP 网络是否畅通或者网络连接速度的命 令,其原理是根据计算机唯一标示的IP 地址,当用户给目的地址发 送一个数据包时,对方就会返回一个同样大小的数据包,根据返回的 数 ...
随机推荐
- linux 系统升级中的一些配置
1. 关闭IPV6 vi /etc/sysconfig/network NETWORKING_IPV6=no #掉 source /etc/sysconfig/network vi /etc/m ...
- 【iOS】自己定义TabBarController
一.自己定义的思路 iOS中的TabBarController确实已经非常强大了.大部分主流iOS应用都会採用. 可是往往也不能满足所有的需求,因此须要自己定义TabBar,自己定义须要对系统的Tab ...
- C语言实现使用动态数组来构造栈结构
我在面前一篇博客<C语言实现使用静态数组来构造栈结构>中使用了静态数组来模拟栈的操作.静态数组的大小是在代码中写死的.是存储在用户栈上面的,使用起来不灵活.在这篇博客中我会使用动态数组来构 ...
- Atom编辑器折腾记_(13)JS代码智能提示补全(插件:atom-ternjs)
题外话 官方正式版尽管内置了.autocomplete-plus;最为明显的一个功能就是记忆你已经输入过的名称进行匹配; 可是针对于某些语言来说,还是有些不足的-.当中JS的补全上就明显不足了-所以须 ...
- [Redux] Important things in Redux
Root Smart component can be overloaded, divide 'smart' component wisely & using Provider. Proble ...
- 集群搭建Solr
Solr集群搭建 SolrCloud需要solr基于zookeeper部署,zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成.由zookeeper来进行协调管理.Zoo ...
- 关系型数据库工作原理-快速缓存(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...
- 【p094】道路游戏
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有n个机器人工厂,两个相邻机器人工厂之间由 ...
- Android菜鸟的成长笔记(22)——Android进程间传递复杂数据(AIDL)
在上一篇中介绍了Andorid中的进程间的通信方式AIDL,本篇文章将介绍传递复杂数据的AIDL Service 下面通过一个示例说明: 本例子中用到了两个自定义类型:Person与Pet, 其中Pe ...
- Js跨域小总结
教程 以下的例子包含的文件均为为http://www.a.com/a.html.http://www.a.com/c.html 与http://www.b.com/b.html ,要做的都是从a.ht ...