简介

CZGL.SystemInfo 是一个支持 Windows 和 Linux 的资源信息获取库,用于获取系统环境、机器资源信息、系统资源使用情况。

Nuget 搜索 CZGL.SystemInfo 即可安装。

类库中每一个属性和方法,我都加上了注释,调用时可以看得到。

平台通用

CZGL.SystemInfo 命名空间下,有个 EnvironmentInfo 静态类,用于获取各种信息。

CZGL.SystemInfo.Info 命名空间中,有三个类型,用于获取和记录不同类型的信息。

MachineRunInfo 用来获取机器运行使用的资源信息;

SystemPlatformInfo 用来获取系统平台信息;

SystemRunEvnInfo 获取系统属性信息;

EnvironmentInfo.GetEnvironmentVariables() 用于获取系统所有的环境变量。

获取某个属性信息

你可以这样使用

  1. // new实例获取
  2. MachineRunInfo m = new MachineRunInfo();
  3. Console.WriteLine("当前进程已用内存" + m.ThisUsedMem);

上面三个类型中,都有一个静态实例,也可以这样使用

  1. Console.WriteLine("当前进程已用内存" + MachineRunInfo.Instance.ThisUsedMem);

MachineRunInfoSystemPlatformInfoSystemRunEvnInfo 三个类型,直接使用属性即可输出信息。

获取所有属性信息

如果你想一次性输出到控制台或者做一个统计,可以使用 EnvironmentInfo 中的方法来快速生成信息。

如果当前系统是中文,会输出中文备注。

  1. // 注意,一些资源的单位都是 kb
  2. // 获取系统平台信息
  3. KeyValuePair<string, object>[] a = env.GetSystemPlatformInfoValue();
  4. // 获取系统运行属性信息
  5. KeyValuePair<string, object>[] b = env.GetSystemRunInfoValue();
  6. // 获取机器资源信息
  7. KeyValuePair<string, object>[] c = env.GetMachineInfoValue();
  8. // 获取系统所有环境变量
  9. KeyValuePair<string, object>[] d = env.GetEnvironmentVariables();

打印示例

  1. Console.WriteLine("\n系统平台信息:\n");
  2. foreach (var item in a)
  3. {
  4. Console.WriteLine($"{item.Key} : {item.Value}");
  5. }
  6. Console.WriteLine("\n\n系统运行属性信息:\n");
  7. foreach (var item in b)
  8. {
  9. Console.WriteLine($"{item.Key} : {item.Value}");
  10. }
  11. Console.WriteLine("\n\n机器资源信息:\n");
  12. foreach (var item in c)
  13. {
  14. Console.WriteLine($"{item.Key} : {item.Value}");
  15. }
  16. Console.WriteLine("\n\n系统所有环境变量:\n");
  17. foreach (var item in d)
  18. {
  19. Console.WriteLine($"{item.Key} : {item.Value}");
  20. }

输出(部分显示)

  1. 系统平台信息:
  2. 运行框架 : .NET Core 3.1.0
  3. 操作系统 : Microsoft Windows 10.0.17763
  4. 操作系统版本 : Microsoft Windows NT 6.2.9200.0
  5. 平台架构 : X64
  6. 系统运行属性信息:
  7. 机器名称 : aaaa-PC
  8. 当前关联用户名 : aaa
  9. 用户网络域名 : aaa-PC
  10. 系统已运行时间(毫秒) : 3227500
  11. Web程序核心框架版本 : 3.1.0
  12. 是否在交互模式中运行 : True
  13. 分区磁盘 : D:\, E:\, F:\, G:\, H:\, X:\
  14. 系统目录 : X:\windows\system32
  15. 机器资源信息:
  16. 当前进程已使用物理内存 : 20020
  17. 当前进程已占耗CPU时间 : 328.125
  18. 系统所有进程各种使用的内存 : System.Collections.Generic.KeyValuePair`2[System.String,System.Int64][]
  19. 系统已使用内存 : 5988340
  20. 系统所有环境变量:
  21. VisualStudioVersion : 16.0
  22. CommonProgramFiles(x86) : x:\Program Files (x86)\Common Files

还可以使用 (string, KeyValuePair<string, object>[]) GetMachineInfo() 等,string 返回此类型信息的说明。

Linux

Nuget 搜索 CZGL.SystemInfo.Linux 安装。

在这个库中,Linux 资源信息包括 进程计量,内存计量,CPU计量,虚拟内存计量,各种进程运行信息计量。

要通过实例化 DynamicInfo 才能获取。

有 5 个对象用于映射相应信息。

Tasks:用于统计进程数量,处于不同状态下的进程数。

CpuState:CPU 使用情况,CPU 各种负载信息。

Mem:物理内存和缓存使用情况。

Swap:虚拟内存使用情况。

PidInfo:一个进程的运行资源信息。

他们都有一个 IsSuccess 属性,用来判断是否能正常获取到 Linux 的信息。

实例化获取对象

  1. DynamicInfo info = new DynamicInfo();

直接使用

可以通过方法获取到相应的对象。

  1. var item = info.GetTasks();
  2. Console.WriteLine("系统中共有进程数 :" + item.Total);
  3. Console.WriteLine("正在运行的进程数 :" + item.Running);

批量获取

以下是批量获取的示例,每个属性和属性值生成一个键值对,可以批量获取信息列表。

如果当前系统是中文,会输出中文备注。

  1. // 获取进程统计
  2. KeyValuePair<string, object>[] a = info.GetRefTasks();
  3. // 获取CPU资源统计
  4. KeyValuePair<string, object>[] b = info.GetRefCpuState();
  5. // 获取内存统计
  6. KeyValuePair<string, object>[] c = info.GetRefMem();
  7. // 获取虚拟内存统计
  8. KeyValuePair<string, object>[] d = info.GetRefSwap();
  9. Dictionary<int, PidInfo> dic = info.GetPidInfo();
  10. Console.WriteLine("\n进程统计:\n");
  11. foreach (var item in a)
  12. {
  13. Console.WriteLine($"{item.Key} : {item.Value}");
  14. }
  15. Console.WriteLine("\n\nCPU资源统计:\n");
  16. foreach (var item in b)
  17. {
  18. Console.WriteLine($"{item.Key} : {item.Value}");
  19. }
  20. Console.WriteLine("\n\n内存统计:\n");
  21. foreach (var item in c)
  22. {
  23. Console.WriteLine($"{item.Key} : {item.Value}");
  24. }
  25. Console.WriteLine("\n\n获取虚拟内存统计:\n");
  26. foreach (var item in d)
  27. {
  28. Console.WriteLine($"{item.Key} : {item.Value}");
  29. }
  30. Console.WriteLine("\n\n 各个进程使用的资源:\n");
  31. Console.WriteLine(" 进程Id 进程名称 所属用户 优化级 高低优先级 虚拟内存 物理内存 共享内存 进程状态 占用系统CPU(%) 占用内存(%d) ");
  32. foreach (var item in dic)
  33. {
  34. Console.WriteLine($"{item.Key} {item.Value.Command} {item.Value.User} {item.Value.PR} " +
  35. $"{item.Value.Nice} {item.Value.VIRT} {item.Value.RES} {item.Value.SHR} " +
  36. $"{item.Value.State} {item.Value.CPU} {item.Value.Mem}");
  37. }
  38. }

输出

  1. 进程统计:
  2. Total : 93
  3. Running : 1
  4. Sleeping : 59
  5. Stopped : 0
  6. Zombie : 0
  7. CPU资源统计:
  8. UserSpace : 1
  9. Sysctl : 0.6
  10. NI : 0
  11. Idolt : 98.3
  12. WaitIO : 0.1
  13. HardwareIRQ : 0
  14. SoftwareInterrupts : 0
  15. 内存统计:
  16. Total : 1009048
  17. Used : 334040
  18. Free : 85408
  19. Buffers : 589600
  20. CanUsed : 675008
  21. 获取虚拟内存统计:
  22. Total : 0
  23. Used : 0
  24. Free : 0
  25. AvailMem : 505744

Windows 暂时不写了。剪头发去了。

.NET Core 获取主机运行资源的库的更多相关文章

  1. .NET Core 获取程序运行环境信息与反射的应用

    目录 RuntimeInformation.Environment 获取信息 反射获取信息 获取某个属性的值以及别名 反射获取信息 使用 总结 笔者的九篇反射系统文章已经完结,但是笔者会持续更新反射在 ...

  2. .NET Core 跨平台资源监控库及 dotnet tool 小工具

    目录 简介 dotnet tool 体验 CZGL.SystemInfo SystemPlatformInfo ProcessInfo 内存监控 NetworkInfo DiskInfo 简介 CZG ...

  3. ASP.NET Core中的运行状况检查

    由卢克·莱瑟姆和格伦Condron ASP.NET Core提供了运行状况检查中间件和库,用于报告应用程序基础结构组件的运行状况. 运行状况检查由应用程序公开为HTTP终结点.可以为各种实时监视方案配 ...

  4. saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)

    一.编写插件基类 1.目录结构 1.我是如何获知我有多少种系统? 当客户端第一连接过来的时候,我就已经把这些文件存下来了 ,存在到哪里了?存到数据库了 每次对主机发送命令的动作时,我从库里把数据取出来 ...

  5. (15)ASP.NET Core Web主机(IWebHostBuilder)

    1.前言 ASP.NET Core应用程序可以配置和启动主机(Host).主机负责应用程序启动和生存期管理,配置服务器和请求处理管道.主机还可以设置日志记录.依赖关系注入和配置.而host主机又包括W ...

  6. (16)ASP.NET Core 通用主机(HostBuilder)

    1.前言 ASP.NET Core应用程序可以配置和启动主机(Host).主机负责应用程序启动和生命周期管理.通用主机用于无法处理HTTP请求的应用程序.通用主机的用途是将HTTP管道从Web主机AP ...

  7. dotnet core 获取 MacAddress 地址方法

    本文告诉大家如何在 dotnet core 获取 Mac 地址 因为在 dotnetcore 是没有直接和硬件相关的,所以无法通过 WMI 的方法获取当前设备的 Mac 地址 但是在 dotnet c ...

  8. 使用 C# 开发 Kubernetes 组件,获取集群资源信息

    写什么呢 前段时间使用 C# 写了个项目,使用 Kubernetes API Server,获取信息以及监控 Kubernetes 资源,然后结合 Neting 做 API 网关. 体验地址 http ...

  9. linux中uptime命令获取主机运行时间和查询系统负载信息

    系统中的uptime命令主要用于获取主机运行时间和查询linux系统负载等信息.uptime命令可以显示系统已经运行了多长时间,信息显示依次为:现在时间.系统已经运行了多长时间.目前有多少登陆用户.系 ...

随机推荐

  1. 绿洲作业第一周 - Y3每日中文学习任务清单

    尽量每天完成一首古诗. 如果孩子另有学习安排,可在周日(2.16)23:59前,完成任务.有兴趣.学有余力的孩子可以自我拓展其中的“寒假读诗”.

  2. Java操作redis客户端Jedis使用

    1.1   jedis介绍 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Java的客户端,有 ...

  3. 实战_3:新建产品配置(product)并导出项目

    产品配置Product 产品配置用于定义和管理RCP应用的多个方面特征.并支持将RCP项目导出为部署包(类似eclipse压缩包),可以直接部署到其他环境上使用. 产品配置必须新建一个 扩展名为 .p ...

  4. SPACESNIFFER查看文件大小

  5. javaee验证码如何使用

    首先需要导入jar包 ValidateCode.jar 110   25  为验证码框的大小  4为验证码数目 9为干扰线条数 Servlet代码如下 运行截图如下

  6. Ajax如何提交数据到springMVC后台

    现在好多web项目实现前段和后端分离,实现前端和后端技术人员,使他们加快开发,减少沟通上的问题,后台只需要提供访问接口,而前天只需要调用提供的接口即可.减少前后端的沟通上的成本 本项目是开发中发现aj ...

  7. JSP_EL的回顾

    在 JSP 页面中,使用标签库代替传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现.鉴于此,出现了 JSTL ( JSP Standa ...

  8. leetcode第22题:括号生成

    力扣上的题目可以大致分为以下种类: 对某种复杂规则的彻底解析,很有可能要构造状态机,充分考虑边界情况. 对某种数据结构及算法的应用. 对数学概念.遍历.动态规划等的综合应用. 通过分析,本题应该属于1 ...

  9. struts2和springmvc比较1

    其实都是ssh只是一个是struts2+spring3.0+hibernate,而另外一个是 springmvc+spring3.0+hibernate,纵向来看比较struts2和springmvc ...

  10. AI能帮我们造出一个无肉的世界吗?

    AI听起来很遥远,其实已经渗透到我们的日常工作和生活中.在不远的未来,互联网.大数据.硬件的发展和软件的优化,乃至全社会的参与,人工智能将真正从实验室走进生活,它将成为改变我们生活的一部分.我们吃的肉 ...