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. css3遇到的一些属性

    rgba          是由red.green.blue 三种颜色搭配出来的box-shadow     向元素添加阴影层,水平阴影位置,垂直阴影位置,后面是可选:模糊距离,阴影大小,颜色,是否是 ...

  2. C#语法糖之第五篇: 泛型委托- Action<T>

    因为工作的原因(其实还是个人的惰性)昨天没有给大家分享文章,然后这几天也有很多园友也提出了他们报告的意见及指导,再次感谢这些兄弟们的照顾我 和支持,这个分类的文章我当时想的是把我的学习经验和工作中用到 ...

  3. scope的参数范围

    Default -- 显示当前文件夹下的:文件和文件夹 FilesOnly--显示当前文件夹下的:文件 Recursive --显示当前文件夹下的:所有文件,包括子文件夹中的文件 RecursiveA ...

  4. Android 设计随便说说之简单实践(合理组合)

    上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...

  5. python基础知识一

    数 python中有4种类型的数--整数.长整数.浮点数和复数. --2是一个整数 --长整数不过是大一些的整数 --3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里52.3E-4表 ...

  6. P2P之UDP穿透NAT原理

    首先先介绍一些基本概念:             NAT(Network   Address   Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就 ...

  7. 第一章 SQL基础

    第一部分:SQL基础1. 为什么学习SQL自人类社会形成之日起,社会的运转就在不断地产生和使用各种信息(文献.档案.资料.数据等):在如今所谓的信息时代,由于计算机和互联网的作用,信息的产生和使用达到 ...

  8. ios专题 - GCD(1)

    什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像 NSOperationQueue,他们都允 ...

  9. Java之final的解析

    在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量). 当用final修饰一个类时,表明这个类不能被继承. 对于一个final变量,如果是基本数据类型的变量,则其数值一旦 ...

  10. 【转】ASP.NET常用数据绑定控件优劣总结

    转自:http://www.cnblogs.com/Olive116/archive/2012/10/24/2736570.html ASP.NET常用数据绑定控件优劣总结   本文的初衷在于对Asp ...