using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Management;
using System.Runtime.Serialization.Formatters.Binary; using RemoteDeploy.Core;
using RemoteDeploy.Core.Attributes;
using RemoteDeploy.CommandHelper; using Common.Logging; namespace RemoteDeploy.Commands
{
[Command(Name = "memoryMonitorCommand", Description = "monitoring memory usage")]
public class MemoryMonitorCommand
{
private const string PROPERTY_CAPACITY = "Capacity";
private const string PROPERTY_AVAILABLE_BYTES = "AvailableBytes";
private const string PROPERTY_PROCESS_ID = "ProcessId";
private const string PROPERTY_PROCESS_NAME = "Name";
private const string PROPERTY_WORKING_SET_SIZE = "WorkingSetSize"; private const string QUERY_MEMORY1 = "SELECT * FROM Win32_PhysicalMemory";
private const string QUERY_MEMORY2 = "SELECT * FROM Win32_PerfRawData_PerfOS_Memory";
private const string QUERY_MEMORY3 = "SELECT * FROM Win32_Process"; ILog logger = LogManager.GetLogger(typeof(MemoryMonitorCommand)); [Parameter(Name = "appNames")]
public string AppNames; [Execute]
public void Run()
{
var query1 = new SelectQuery(QUERY_MEMORY1);
var query2 = new SelectQuery(QUERY_MEMORY2);
var query3 = new SelectQuery(QUERY_MEMORY3);
var searcher1 = new ManagementObjectSearcher(query1);
var searcher2 = new ManagementObjectSearcher(query2);
var searcher3 = new ManagementObjectSearcher(query3); var capacity = 0.0;
var free = 0.0;
foreach (var o in searcher1.Get())
capacity += (double)Convert.ToUInt64(o[PROPERTY_CAPACITY]) / (double)( * );
foreach (var o in searcher2.Get())
free += (double)Convert.ToUInt64(o[PROPERTY_AVAILABLE_BYTES]) / (double)( * );
//var appsUsed = new Dictionary<string, double>();
//var apps = AppNames.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
//foreach (var app in apps)
//{
// var appUsed = 0.0;
// foreach (var o in searcher3.Get())
// if (string.Equals(Convert.ToString(o[PROPERTY_PROCESS_NAME]), app, StringComparison.OrdinalIgnoreCase))
// appUsed += (double)Convert.ToUInt64(o[PROPERTY_WORKING_SET_SIZE]) / (double)(1024 * 1024);
// appsUsed.Add(app, appUsed);
//}
var appsUsed = new Dictionary<string, Dictionary<uint, double>>();
var apps = AppNames.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var o in searcher3.Get())
{
var appName = Convert.ToString(o[PROPERTY_PROCESS_NAME]);
foreach (var app in apps)
{
if (string.Equals(appName, app, StringComparison.OrdinalIgnoreCase))
{
var appId = Convert.ToUInt32(o[PROPERTY_PROCESS_ID]);
var workingSetSize = (double)Convert.ToUInt64(o[PROPERTY_WORKING_SET_SIZE]) / (double)( * );
if (appsUsed.ContainsKey(appName))
appsUsed[appName].Add(appId, workingSetSize);
else
appsUsed.Add(appName, new Dictionary<uint, double>()
{
{
appId, workingSetSize
}
});
break;
}
}
} var memInfo = new MemoryInfo()
{
Capacity = capacity,
Free = free,
Used = capacity - free,
AppsUsed = appsUsed
}; var bin = new BinaryFormatter();
var ms = new MemoryStream();
bin.Serialize(ms, memInfo);
logger.Info("memory monitor begin execute callback");
CommandContext.Instance.SendMessage("memory usage info", ms.ToArray());
logger.Info("memory monitor end execute callback");
} }
}

c#查看电脑内存的更多相关文章

  1. 查看电脑内存是ddr3还是ddr4

    内存不够用了 要加个内存 但是不想拆机 怎么知道自己电脑是第几代内存呢? 怎么知道频率呢? 1.运行cmd 2.输入wmic回车 3.输入memorychip回车 4.往右拉找到Speed Statu ...

  2. 如何查看电脑最大支持多少GB内存

    第一种方法: 1.打开“开始”菜单,点击“运行”按钮,也可以直接使用[Win + R]组合快捷键打开, 在弹出来的窗口输入“CMD”,然后确定或者按下回车键 2.在命令窗口输入“wmic memphy ...

  3. cpu-z如何查看电脑配置数据方法介绍

    CPU-Z是款经典的内存检测工具,具有5大功能,使用CPU-Z可以查询电脑的处理器.缓存.主板.内存.显卡以及SPD的信息.但是怎么具体看哪一个项目呢?在今天的教程中,小编就跟大家分享一下cpu-z ...

  4. 【转载】 Windows系统电脑通过设备管理器查看电脑配置信息

    在采购电脑或者使用电脑的过程中,有时候我们需要查看到电脑的所有设备硬件信息,此时就可以通过Windows系统自带的设备管理器界面来查看该电脑所有的设备配置信息,包括CPU型号频率.内存.硬盘型号以及容 ...

  5. 【转载】CentOS下查看电脑硬件设备属性命令

    CentOS下查看电脑硬件设备属性命令2018年09月13日 17:48:31 乔烨 阅读数 510如何在linux下查看电脑硬件设备属性 # uname -a # 查看内核/操作系统/CPU信息 # ...

  6. 【电脑常识】如何查看电脑是32位(X86)还是64位(X64),如何知道硬件是否支持64位系统

    开始->运行->输入cmd确定->输入systeminfo 回车 待加载完成,就会看到如下信息(不同版本略有差异): 一.如何查看电脑是32位(X86)还是64位(X64) 方法2: ...

  7. Android内存管理(5)*官方教程:Logcat内存日志各字段含义,查看当前内存快照,跟踪记录内存分配,用adb查看内存情况时各行列的含义,捕获内存快照的3种方法,如何让程序暴漏内存泄漏的方法

    Investigating Your RAM Usage In this document Interpreting Log Messages                 内存分析日志中各消息的含 ...

  8. 用C#来查看电脑硬件和系统信息

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用C#来查看电脑硬件和系统信息.

  9. linux查看占用内存/cpu最高的进程情况

    linux查看占用cpu最高的进程 ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head 或者top (然后按下M,注意这里是大写) linux查 ...

随机推荐

  1. C# Java DES加密解密

    转自http://www.cnblogs.com/zhuiyi/archive/2013/04/01/2993201.html 最近被DES加解密弄得超级郁闷,我用C#的方法加密得到的密文老是跟客户给 ...

  2. 使用linq语句获取指定条数的记录

    //获得指定个数的子文件夹,用于分页 var pageAlbums = (from SPFolder pf in lstSubAlbums select pf)                     ...

  3. 【STL】string 常用函数

    string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类还支持默认构造 ...

  4. 在github上搭建博客(使用Jekyll)

    简单说,只需要三步,就可以在 Github 搭建起一个博客: 在 Github 上建一个名为 xxx.github.io 的库: 把看中了的 Jekyll 模板 clone 到本地: 把这个模板 pu ...

  5. 分享一个在PearOS里面的plank的配置文件

    plank的配置文件的路径是/home/pear/.config/plank/dock1/settings #This file auto-generated by Plank. #2013-09-0 ...

  6. 数据库(学习整理)----4--Oracle数据查询(基础点1)

    其他: 计算机中的内存是线性的,一维. length('')计算字符的个数,而不是字节的个数 Oracle中的日期类型和数值类型的数据可以做运算符(>,=,<,<>)比较 如果 ...

  7. Webstorm6的汉化以及主题设置

    Webstorm6.0.2界面截图: webstorm作为一款前端开发软件,被业内称为神器,下面是下载地址. 需要的人太多,邮件不过来,传到这边方便大家下载 汉化包 http://www.jetbra ...

  8. C#程序中:如何向xml文件中写入数据和读取数据

    xml文件作为外部信息存储文件使用简单,方便,其结构和表格略有相似,下面简单的说一下xml文件内容的读取 …… using System.Xml;using System.IO;namespace W ...

  9. 使用PHP对文件进行压缩解压(zip)

    使用虚拟主机进行文件上传时最常用的工具莫过于FTP了,但是使用FTP有一个弊端就是文件太多时上传或下载速度比较慢,如果上传时将文件打包,上传后在 空间解压缩,同样下载前将文件打包压缩以压缩包的形式下载 ...

  10. onethink 换空间报错 解决方案

    onethink 换空间的时候有两个配置文件 Application\Common\Conf Application\User\Conf 如果报错先测试数据库 <?php $con = mysq ...