C#获取windows系统资源使用情况

1.前言

之前有一篇博客介绍如何获取Linux服务器上的资源使用情况《Java 获取服务器资源(内存、负载、磁盘容量)》,这里介绍如何通过C#获取Window系统的资源使用。

2.获取服务器资源

2.1.内存

[DllImport("kernel32.dll")][return: MarshalAs(UnmanagedType.Bool)]private static extern bool GlobalMemoryStatusEx(ref MEMORY_INFO mi);//定义内存的信息结构[StructLayout(LayoutKind.Sequential)]private struct MEMORY_INFO {public uint DWLength;//当前结构体大小public uint DWMemoryLoad;//当前内存使用率public ulong ullTotalPhys;//总计物理内存大小public ulong ullAvailPhys;//可用物理内存代销public ulong ullTotalPagefiles;//总计交换文件大小public ulong ullAvailPagefiles;//可用交换文件大小public ulong ullTotalVirtual;//总计虚拟内存大小public ulong ullAvailVirtual;//可用虚拟内存大小}private static MEMORY_INFO GetMemoryInfo() {MEMORY_INFO memoryInfo = new MEMORY_INFO();memoryInfo.DWLength = (uint)System.Runtime.InteropServices.Marshal.SizeOf(memoryInfo);GlobalMemoryStatusEx(ref memoryInfo);return memoryInfo;}/// <summary>/// 获取内存信息/// </summary>/// <returns></returns>public static ServerMemory GetSysMemoryInfo(){try{MEMORY_INFO memoryInfo = GetMemoryInfo();ServerMemory serverMemory = new ServerMemory();serverMemory.serverId = serverId;serverMemory.serverName = serverName;serverMemory.memTotal = (uint)(memoryInfo.ullTotalPhys / 1024);serverMemory.memFree = (uint)(memoryInfo.ullTotalPagefiles / 1024);serverMemory.memAvailable = (uint)(memoryInfo.ullAvailPhys / 1024);serverMemory.active = (uint)(memoryInfo.ullAvailPhys/1024);long timestamp = CommonUtil.getNowDateTimestamp();serverMemory.dateTimestamp = timestamp;serverMemory.dateTime = CommonUtil.dateTime2Timestamp(timestamp);return serverMemory;}catch (Exception ex) {Log.Instance.Error("GetSysMemoryInfo:" + ex.Message);return null;}}

因为获取到的资源是以byte为单位,我这里将其转成了KB,所以除以了1024.

ServerMemory实体类

public class ServerMemory{public string serverId { set; get; }public string serverName { set; get; }/// <summary>/// 内存总量/// </summary>public uint memTotal { set; get; }/// <summary>/// 系统保留量/// </summary>public uint memFree { set; get; }/// <summary>/// 应用程序可用量/// </summary>public uint memAvailable { set; get; }/// <summary>/// 可使用量/// </summary>public uint active { set; get; }public string dateTime { set; get; }public long dateTimestamp { set; get; }}

2.2.磁盘

public static ServerDisk GetUsedDisk() {try{List<Dictionary<string, string>> diskInfoList = new List<Dictionary<string, string>>();ManagementClass diskClass = new ManagementClass("Win32_LogicalDisk");ManagementObjectCollection disks = diskClass.GetInstances();foreach (ManagementObject disk in disks){Dictionary<string, string> diskInfoDic = new Dictionary<string, string>();try{// 磁盘名称diskInfoDic["Name"] = disk["Name"].ToString();// 磁盘描述diskInfoDic["Description"] = disk["Description"].ToString();// 磁盘总容量,可用空间,已用空间if (System.Convert.ToInt64(disk["Size"]) > 0){long totalSpace = System.Convert.ToInt64(disk["Size"]) / 1024;long freeSpace = System.Convert.ToInt64(disk["FreeSpace"]) / 1024;long usedSpace = totalSpace - freeSpace;diskInfoDic["totalSpace"] = totalSpace.ToString();diskInfoDic["usedSpace"] = usedSpace.ToString();diskInfoDic["freeSpace"] = freeSpace.ToString();}diskInfoList.Add(diskInfoDic);}catch (Exception ex){Log.Instance.Error("ManagementObject->disk:" + ex.Message);}}if (diskInfoList.Count > 0){ServerDisk serverDisk = new ServerDisk();serverDisk.serverId = serverId;serverDisk.serverName = serverName;Dictionary<string, DiskInfo> diskMap = new Dictionary<string, DiskInfo>();foreach (Dictionary<string, string> dic in diskInfoList){if (dic.ContainsKey("totalSpace") && dic.ContainsKey("usedSpace") && dic.ContainsKey("freeSpace")){DiskInfo diskInfo = new DiskInfo();diskInfo.diskName = dic["Name"];diskInfo.diskSize = double.Parse(dic["totalSpace"]);diskInfo.used = double.Parse(dic["usedSpace"]);diskInfo.avail = double.Parse(dic["freeSpace"]);diskInfo.usageRate = (int)((diskInfo.used / diskInfo.diskSize) * 100);diskMap.Add(diskInfo.diskName, diskInfo);}}serverDisk.diskInfoMap = diskMap;long timestamp = CommonUtil.getNowDateTimestamp();serverDisk.dateTimestamp = timestamp;serverDisk.dateTime = CommonUtil.dateTime2Timestamp(timestamp);return serverDisk;}else{return null;}}catch (Exception ex) {Log.Instance.Error("GetUsedDisk:"+ex.Message);return null;}}

ServerDisk实体类

   public class ServerDisk{public string serverId { set; get; }public string serverName { set; get; }public Dictionary<string,DiskInfo> diskInfoMap { set; get; }public string dateTime { set; get; }public long dateTimestamp { set; get; }}

DiskInfo实体类

    public class DiskInfo{public string diskName { set; get; }public double diskSize { set; get; }public double used { set; get; }public double avail { set; get; }public int usageRate { set; get; }}

2.3.CPU

public static ServerCpu GetUsedCPU() {ManagementClass mc = new ManagementClass("Win32_PerfFormattedData_PerfOs_Processor");ManagementObjectCollection moc = mc.GetInstances();List <string> list = new List <string> ();foreach (ManagementObject mo in moc) {if (mo["Name"].ToString() == "_Total") {list.Add(mo["percentprocessorTime"].ToString());}}int percentage = list.Sum(s => int.Parse(s));ServerCpu serverCpu = new ServerCpu();serverCpu.serverId = serverId;serverCpu.serverName = serverName;serverCpu.percentage = percentage;long timestamp = CommonUtil.getNowDateTimestamp();serverCpu.dateTimestamp = timestamp;serverCpu.dateTime = CommonUtil.dateTime2Timestamp(timestamp);return serverCpu;}

ServerCpu实体类

 public class ServerCpu{public string serverId { set; get; }public string serverName { set; get; }public int percentage { set; get; }public string dateTime { set; get; }public long dateTimestamp { set; get; }}

3.最终效果

最终我想实现对Linux和Windows服务器的监控,类似效果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/228037.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven项目提示Ignored pom.xml问题

1 环境 &#xff08;1&#xff09;IDEA开发工具&#xff1a;2022.2.1 &#xff08;2&#xff09;JDK&#xff1a;Java17&#xff08;Spring6要求JDK最低版本是Java17&#xff09; &#xff08;3&#xff09;Spring&#xff1a;6.1.2 &#xff08;4&#xff09;Maven 3.8.8 2 …

C#上位机与欧姆龙PLC的通信06---- HostLink协议(FINS版)

1、介绍 对于上位机开发来说&#xff0c;欧姆龙PLC支持的主要的协议有Hostlink协议&#xff0c;FinsTcp/Udp协议&#xff0c;EtherNetIP协议&#xff0c;本项目使用Hostlink协议。 Hostlink协议是欧姆龙PLC与上位机链接的公开协议。上位机通过发送Hostlink命令&#xff0c;可…

计算机组成原理复习7

内存管理 文章目录 内存管理存储器概述存储器的分类按在计算机中的作用&#xff08;层次&#xff09;分类按存储介质分类按存取方式分类按信息的可保存性分类 存储器的性能指标存储容量单位成本存储速度&#xff1a;数据传输率数据的宽度/存储周期 存储器的层次化结构多级存储系…

Java注解学习,一文掌握@Autowired 和 @Resource 注解区别

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

Unity坦克大战开发全流程——开始场景——开始界面

开始场景——开始界面 step1&#xff1a;设置UI 反正按照这张图拼就行了 step2&#xff1a;写脚本 前面的拼UI都是些比较机械化的工作&#xff0c;直到这里写代码的时候才真正开始有点意思了&#xff0c;从这里开始&#xff0c;我们就要利用面向对象的思路来进行分析&#xff1…

【量化】蜘蛛网策略复现

文章目录 蜘蛛网策略研报概述持仓数据整理三大商品交易所的数据统一筛选共有会员清洗数据计算研报要求数据全部代码 策略结果分析无参数策略有参数策略正做反做 MSD技术指标化 蜘蛛网策略 策略来自《东方证券-股指期货趋势交易之蜘蛛网策略——从成交持仓表中捕捉知情投资者行为…

从实际工作情况,介绍嵌入式(MCU)软件开发常用(通用)工具

目录 前言 1、代码阅读及编辑工具&#xff08;VSCode、Understand&#xff09; 2、代码对比工具&#xff08;Beyond Compare&#xff09; 3、代码仓库相关工具&#xff08;Git、SVN、Tortoise&#xff09; 4、文本编辑器&#xff08;Notepad&#xff09; 5、电脑文件搜索工…

Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性

目录 1. 背景 2. Windows系统安装canal 3.Mysql准备工作 4. 公共依赖包 5. Redis缓存设计 6. mall-canal-service 1. 背景 canal [kənl] &#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费。其诞…

【深度解析C++】const成员函数

系列文章目录 &#x1f308;座右铭&#x1f308;&#xff1a;人的一生这么长、你凭什么用短短的几年去衡量自己的一生&#xff01; &#x1f495;个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 ❤️相关文章❤️&#xff1a;Cthis指针&#xf…

PostgreSQL | FunctionProcedure | 函数与存储过程的区别

文章目录 PostgreSQL | Function&Procedure | 函数与存储过程的区别1. 简述书面说法大白话讲 2. 函数&#xff08;Function&#xff09;2.1 定义2.2 用途2.3 执行2.4 事务处理2.5 说点例子1. 当参数都是IN类时2. 参数中出现OUT、INOUT参数时 3. 存储过程&#xff08;Proced…

C语言之整型提升

文章目录 1 有可能出现的问题2 产生以上问题的原因&#xff08;整型提升&#xff09;3 整型提升的过程4 整型提升示例5 总结 1 有可能出现的问题 代码如下 #include <stdio.h>int main () {int a -1;unsigned int b 1;if (a < b) {printf("a < b");}…

【STM32】SPI通信

1 SPI通信 SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;是由Motorola公司开发的一种通用数据总线 四根通信线&#xff1a;SCK&#xff08;Serial Clock&#xff0c;串行时钟&#xff09;、MOSI&#xff08;Master Output Slave Input&am…

使用react+vite开发项目时候,部署上线后刷新页面无法访问解决办法

说一下我这边的环境和使用的路由模式&#xff1a;vitereactBrowserRouter路由模式&#xff0c;所以如果你和我一样的话&#xff0c;可以试试我的这种解决办法&#xff0c;我是将项目打包后直接丢到服务器上的目录里面&#xff0c;然后配置nginx直接访问根目录。 我的nginx配置…

React快速入门之交互性

响应事件 创建事件处理函数 处理函数名常以handle事件名命名 function handlePlayClick() {alert(Playing);}传递事件处理函数 函数名、匿名两种方式&#xff01; function PlayButton() {function handlePlayClick() {alert(Playing);}return (<Button handleClick{handl…

java虚拟机内存管理

文章目录 概要一、jdk7与jdk8内存结构的差异二、程序计数器三、虚拟机栈3.1 什么是虚拟机栈3.2 什么是栈帧3.3 栈帧的组成 四、本地方法栈五、堆5.1 堆的特点5.2 堆的结构5.3 堆的参数配置 六、方法区6.1 方法区结构6.2 运行时常量池 七、元空间 概要 根据 JVM 规范&#xff0…

探索小红书笔记API:挖掘数据背后的故事

随着数字化时代的到来&#xff0c;数据已经成为企业和个人决策的重要依据。小红书作为一个流行的社交电商平台&#xff0c;积累了大量的用户数据和内容。通过探索小红书笔记API&#xff0c;我们可以深入挖掘这些数据背后的故事&#xff0c;从而更好地理解用户需求和市场趋势。 …

弱电工程计算机网络系统基础知识

我们周围无时无刻不存在一张网&#xff0c;如电话网、电报网、电视网、计算机网络等&#xff1b;即使我们身体内部也存在许许多多的网络系统&#xff0c;如神经系统、消化系统等。最为典型的代表即计算机网络&#xff0c;它是计算机技术与通信技术两个领域的结合。 计算机网络的…

《Spring Cloud学习笔记:微服务保护Sentinel + JMeter快速入门》

Review 解决了服务拆分之后的服务治理问题&#xff1a;Nacos解决了服务治理问题OpenFeign解决了服务之间的远程调用问题网关与前端进行交互&#xff0c;基于网关的过滤器解决了登录校验的问题 流量控制&#xff1a;避免因为突发流量而导致的服务宕机。 隔离和降级&#xff1a…

八股文打卡day12——计算机网络(12)

面试题&#xff1a;HTTPS的工作原理&#xff1f;HTTPS是怎么建立连接的&#xff1f; 我的回答&#xff1a; 1.客户端向服务器发起请求&#xff0c;请求建立连接。 2.服务器收到请求之后&#xff0c;向客户端发送其SSL证书&#xff0c;这个证书包含服务器的公钥和一些其他信息…

LVS那点事

LVS 原理 IPVS LVS 的 IP 负载均衡技术是通过 IPVS 模块来实现的&#xff0c;IPVS 是 LVS 集群系统的核心软件&#xff0c;它的主要作用是&#xff1a;安装在 Director Server 上&#xff0c;同时在 Director Server 上虚拟出一个 IP 地址&#xff0c;用户必须通过这个虚拟的…