简介

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

Nuget 搜索 CZGL.SystemInfo 即可安装。

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

平台通用

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

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

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

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

SystemRunEvnInfo 获取系统属性信息;

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

获取某个属性信息

你可以这样使用

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

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

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

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

获取所有属性信息

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

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

            // 注意,一些资源的单位都是 kb

            // 获取系统平台信息
KeyValuePair<string, object>[] a = env.GetSystemPlatformInfoValue();
// 获取系统运行属性信息
KeyValuePair<string, object>[] b = env.GetSystemRunInfoValue();
// 获取机器资源信息
KeyValuePair<string, object>[] c = env.GetMachineInfoValue();
// 获取系统所有环境变量
KeyValuePair<string, object>[] d = env.GetEnvironmentVariables();

打印示例

            Console.WriteLine("\n系统平台信息:\n");
foreach (var item in a)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n系统运行属性信息:\n");
foreach (var item in b)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n机器资源信息:\n");
foreach (var item in c)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n系统所有环境变量:\n");
foreach (var item in d)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}

输出(部分显示)

系统平台信息:

运行框架    :    .NET Core 3.1.0
操作系统 : Microsoft Windows 10.0.17763
操作系统版本 : Microsoft Windows NT 6.2.9200.0
平台架构 : X64 系统运行属性信息: 机器名称 : aaaa-PC
当前关联用户名 : aaa
用户网络域名 : aaa-PC
系统已运行时间(毫秒) : 3227500
Web程序核心框架版本 : 3.1.0
是否在交互模式中运行 : True
分区磁盘 : D:\, E:\, F:\, G:\, H:\, X:\
系统目录 : X:\windows\system32 机器资源信息: 当前进程已使用物理内存 : 20020
当前进程已占耗CPU时间 : 328.125
系统所有进程各种使用的内存 : System.Collections.Generic.KeyValuePair`2[System.String,System.Int64][]
系统已使用内存 : 5988340 系统所有环境变量: VisualStudioVersion : 16.0
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 的信息。

实例化获取对象

            DynamicInfo info = new DynamicInfo();

直接使用

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

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

批量获取

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

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

            // 获取进程统计
KeyValuePair<string, object>[] a = info.GetRefTasks(); // 获取CPU资源统计
KeyValuePair<string, object>[] b = info.GetRefCpuState(); // 获取内存统计
KeyValuePair<string, object>[] c = info.GetRefMem(); // 获取虚拟内存统计
KeyValuePair<string, object>[] d = info.GetRefSwap(); Dictionary<int, PidInfo> dic = info.GetPidInfo(); Console.WriteLine("\n进程统计:\n");
foreach (var item in a)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\nCPU资源统计:\n");
foreach (var item in b)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n内存统计:\n");
foreach (var item in c)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n获取虚拟内存统计:\n");
foreach (var item in d)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n 各个进程使用的资源:\n");
Console.WriteLine(" 进程Id 进程名称 所属用户 优化级 高低优先级 虚拟内存 物理内存 共享内存 进程状态 占用系统CPU(%) 占用内存(%d) "); foreach (var item in dic)
{
Console.WriteLine($"{item.Key} {item.Value.Command} {item.Value.User} {item.Value.PR} " +
$"{item.Value.Nice} {item.Value.VIRT} {item.Value.RES} {item.Value.SHR} " +
$"{item.Value.State} {item.Value.CPU} {item.Value.Mem}");
}
}

输出

进程统计:

Total    :    93
Running : 1
Sleeping : 59
Stopped : 0
Zombie : 0 CPU资源统计: UserSpace : 1
Sysctl : 0.6
NI : 0
Idolt : 98.3
WaitIO : 0.1
HardwareIRQ : 0
SoftwareInterrupts : 0 内存统计: Total : 1009048
Used : 334040
Free : 85408
Buffers : 589600
CanUsed : 675008 获取虚拟内存统计: Total : 0
Used : 0
Free : 0
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. 打不开gitHub的解决方法

    因为Github是国外网站,所以经常会遇到打不开的问题,并且有时能打开但是网速好慢 解决这个问题的方法是 : 在C:\Windows\System32\Drivers\etc下找到hosts文件,用记 ...

  2. StartDT AI Lab | 视觉智能引擎+数据决策引擎——打造商业“智能沙盘”

    众所周知,线上商家可以通过淘宝平台的大量前端“埋点”轻松获取商品的加购率.收藏率.转化率.成交额等大量基础信息,甚至商家能够在更精细的层面,获取商品关键字变化或者上新/爆款带来的流量变化数据,更甚者商 ...

  3. 81)PHP,session面试题总结

    (1)session和cookie的比较: (2)session是否可以持久化? (3)

  4. HDU-1711-Number Sequence(KMP)(Rabin-Karp)

    Rabin-Karp Accepted 1711 904MS 5272K 1310 B G++ #include "bits/stdc++.h" using namespace s ...

  5. 【GBK、UTF-8、ISO8859-1】三种编码方式总结及实例

    感谢:https://blog.csdn.net/youngstar70/article/details/64117297 一.总结 在Java中,String的getBytes()方法是得到一个操作 ...

  6. MUI 提问框多个按钮的回调函数

    var btns = new Array("按钮1", "按钮2"); mui.confirm("这是信息", "这是标题&quo ...

  7. 发现日志文件和打印在eclipse控制台中的编码不一致

    发现日志文件和打印在eclipse控制台中的编码不一致,正好相反. 日志文件是用notepad打开的,notepad有自己的编码方式,查询编码为utf-8,日志文件汉字等等显示正常. 但是在eclip ...

  8. 在中国实现自我价值的英国研究员——微软亚洲研究院英国籍研究员Darren的7年之路

    "我和妻子在这儿已经待了7年了,这里的一切都很棒,无论是微软亚洲研究院还是北京."Darren笑着说,似乎他和中国,和北京,和研究院一直停留在"蜜月期",并未曾 ...

  9. html中的锚点介绍和使用

    以下资料整理自网路 1.锚点是网页制作中超级链接的一种,又叫命名锚记.命名锚记像一个迅速定位器一样是一种页面内的超级链接,运用相当普遍. 英文名:anchor 使用命名锚记可以在文档中设置标记,这些标 ...

  10. H5本地离线存储

    前言上一篇文件结尾,有同学问我本地存储图片方法,其实本地存储方式有很多,我们打开谷歌浏览器,查看源代码,在resources页签中,有web SQl ,indexedDB等等,我前面文章讲过Local ...