当前位置: 首页 > news >正文

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服务器的监控,类似效果如下:

相关文章:

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

1.前言 之前有一篇博客介绍如何获取Linux服务器上的资源使用情况《Java 获取服务器资源&#xff08;内存、负载、磁盘容量&#xff09;》&#xff0c;这里介绍如何通过C#获取Window系统的资源使用。 2.获取服务器资源 2.1.内存 [DllImport("kernel32.dll")][retu…...

PE解释器之PE文件结构

PE文件是由许许多多的结构体组成的&#xff0c;程序在运行时就会通过这些结构快速定位到PE文件的各种资源&#xff0c;其结构大致如图所示&#xff0c;从上到下依次是Dos头、Nt头、节表、节区和调试信息(可选)。其中Dos头、Nt头和节表在本文中统称为PE文件头(因为SizeOfHeaders…...

Android—— MIPI屏调试

一、实现步骤 1、在kernel/arch/arm/boot/dts/lcd-box.dtsi文件中打开&dsi0节点&#xff0c;关闭其他显示面板接口&#xff08;&edp_panel、&lvds_panel&#xff09; --- a/kernel/arch/arm/boot/dts/lcd-box.dtsib/kernel/arch/arm/boot/dts/lcd-box.dtsi-5,14 …...

BLE协议—协议栈基础

BLE协议—协议栈基础 BLE协议栈基础通用访问配置文件层&#xff08;Generic Access Profile&#xff0c;GAP&#xff09;GAP角色设备配置模式和规程安全模式广播和扫描 BLE协议栈基础 蓝牙BLE协议栈包含三部分&#xff1a;主机、主机接口层和控制器。 主机&#xff1a;逻辑链路…...

yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏

文章目录 1. 知识蒸馏理论2. yolov8 蒸馏代码应用2.1 环境配置2.2 训练模型(1) 训练教师模型(2) 训练学生模型baseline(3) 蒸馏训练3. 知识蒸馏代码详解3.1 蒸馏参数设置3.2 蒸馏损失代码讲解3.2.1 Feature based loss3.2.1 Logit loss3.3 获取蒸馏的feature map及channels...

03-微服务-Ribbon负载均衡

Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1&#xff0c;怎么变成了http://localhost:8081的呢&#xff1f; 1.2.源码跟踪 为什么我们只输入…...

2023新年总结与展望

2023年总结 对Spring Cloud微服务更加熟悉&#xff0c;对consul、kafka、gateway的熟悉和掌握更近一步对docker和虚拟化部署更加熟悉对PostgreSQL数据库和JPA更加熟悉对clickhouse数据库和大数据分析更加熟悉对netty和socket网络通信更加熟悉 2024年flag 继续深入研究和学习…...

论文阅读——SG-Former

SG-Former: Self-guided Transformer with Evolving Token Reallocation 1. Introduction 方法的核心是利用显著性图&#xff0c;根据每个区域的显著性重新分配tokens。显著性图是通过混合规模的自我关注来估计的&#xff0c;并在训练过程中自我进化。直观地说&#xff0c;我们…...

常用环境部署(十三)——GitLab整体备份及迁移

一、GitLab备份 注意&#xff1a;由于我的GitLab是docker安装的&#xff0c;所以我的操作都是在容器内操作的&#xff0c;大家如果不是用docker安装的则直接执行命令就行。 1、Docker安装GitLab 链接&#xff1a;常用环境部署(八)——Docker安装GitLab-CSDN博客 2、GitLab备…...

海外数据中心代理与住宅代理:优缺点全面对比

数据中心代理和住宅代理是为了匿名而开发的&#xff0c;通过替换网站眼中您自己的 IP 地址。然而&#xff0c;它们在价格、功能、性能或最佳用例方面存在一些差异。那么&#xff0c;这些代理类型到底有什么相似点和不同点呢&#xff1f; 一、什么是数据中心代理&#xff1f; 1…...

springboot实现OCR

1、引入依赖 <dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version> </dependency> 2、config Configuration public class TessOcrConfiguration {Beanpublic …...

【Scala 】注解

在 Scala 中&#xff0c;你可以使用注解来为类、方法或字段添加元数据&#xff0c;影响它们的行为。Scala 的注解使用与 Java 类似&#xff0c;但是 Scala 也支持自定义注解。 文章目录 注解的常见使用方法自定义注解 注解的常见使用方法 以下是一些 Scala 中常见的注解以及它…...

数通基础知识总结

1. 基础概念 1.1. 通信基本原理 通信基本原理涉及信息的生成、编码、传输和解码的过程。在实际应用中&#xff0c;例如电话通信&#xff0c;信息通过话筒转换成模拟信号&#xff0c;经过传输线路传递到接收端&#xff0c;再由耳机解码还原为可理解的信息。 1.2. 信道和信号 …...

机器学习深度学习面试笔记

机器学习&深度学习面试笔记 机器学习Q. 在线性回归中&#xff0c;如果自变量之间存在多重共线性&#xff0c;会导致什么问题&#xff1f;如何检测和处理多重共线性&#xff1f;Q. 什么是岭回归(Ridge Regression)和Lasso回归(Lasso Regression)&#xff1f;它们与普通线性回…...

安卓和Android是两种不同的操作系统?

实际上&#xff0c;安卓和Android并不是同一种操作系统&#xff01; Android是由Google开发并维护更新的一款操作系统&#xff0c;目前仅能运行在Pixel手机上。 Google Pixel 与 iPhone手机&#xff1a;哪个更好&#xff1f;Google Pixel 与 Apple iPhone哪个手机才是性价比最…...

Java学习——设计模式——结构型模式2

文章目录 结构型模式装饰者模式桥接模式外观模式组合模式享元模式 结构型模式 结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。虽然面向对象的继承机制提供了最基本的子类扩展父类的功能&#xff0c;但结构型模式不仅仅简单地使用继承&#xff0c;而更多地通过…...

什么是Maven ??? (以及关于依赖,中央仓库,国内源)

文章目录 什么是 Maven创建第一个 Maven 项目依赖管理Maven 的仓库Maven 如何设置国内源 什么是 Maven Maven &#xff1a;用于构建和管理任何基于java的项目的工具。**说白了就是管理 Java项目 的工具。**我们希望我们已经创建了一些东西&#xff0c;可以使Java开发人员的日常…...

c++期末考题笔试来咯

最后一道大题题目再现 写一个person类&#xff0c;有姓名&#xff0c;性别&#xff0c;年龄。然后在此基础上派生出教师类和学生类。教师类增加了以下数据&#xff1a;工号&#xff0c;职称&#xff0c;工资。学生类增加了以下数据成员&#xff1a;学号&#xff0c;专业&#…...

目标检测篇:如何根据xml标注文件生成类别classes的json文件

1. 介绍 之前在做目标检测任务的时候&#xff0c;发现很多的数据集仅有数据(只有图片标注的xml文件)&#xff0c;没有关于类别的json文件&#xff0c;为了以后方便使用&#xff0c;这里记录一下 一般来说&#xff0c;yolo标注的数据集&#xff0c;只有第一个是数字类别&#x…...

spring见解2基于注解的IOC配置

3.基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 3.1.创建工程 3.1.1.pom.xml <?xml version"1.0" en…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...