.NET Core 获取主机运行资源的库
简介
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);
MachineRunInfo
、SystemPlatformInfo
、 SystemRunEvnInfo
三个类型,直接使用属性即可输出信息。
获取所有属性信息
如果你想一次性输出到控制台或者做一个统计,可以使用 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 获取主机运行资源的库的更多相关文章
- .NET Core 获取程序运行环境信息与反射的应用
目录 RuntimeInformation.Environment 获取信息 反射获取信息 获取某个属性的值以及别名 反射获取信息 使用 总结 笔者的九篇反射系统文章已经完结,但是笔者会持续更新反射在 ...
- .NET Core 跨平台资源监控库及 dotnet tool 小工具
目录 简介 dotnet tool 体验 CZGL.SystemInfo SystemPlatformInfo ProcessInfo 内存监控 NetworkInfo DiskInfo 简介 CZG ...
- ASP.NET Core中的运行状况检查
由卢克·莱瑟姆和格伦Condron ASP.NET Core提供了运行状况检查中间件和库,用于报告应用程序基础结构组件的运行状况. 运行状况检查由应用程序公开为HTTP终结点.可以为各种实时监视方案配 ...
- saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)
一.编写插件基类 1.目录结构 1.我是如何获知我有多少种系统? 当客户端第一连接过来的时候,我就已经把这些文件存下来了 ,存在到哪里了?存到数据库了 每次对主机发送命令的动作时,我从库里把数据取出来 ...
- (15)ASP.NET Core Web主机(IWebHostBuilder)
1.前言 ASP.NET Core应用程序可以配置和启动主机(Host).主机负责应用程序启动和生存期管理,配置服务器和请求处理管道.主机还可以设置日志记录.依赖关系注入和配置.而host主机又包括W ...
- (16)ASP.NET Core 通用主机(HostBuilder)
1.前言 ASP.NET Core应用程序可以配置和启动主机(Host).主机负责应用程序启动和生命周期管理.通用主机用于无法处理HTTP请求的应用程序.通用主机的用途是将HTTP管道从Web主机AP ...
- dotnet core 获取 MacAddress 地址方法
本文告诉大家如何在 dotnet core 获取 Mac 地址 因为在 dotnetcore 是没有直接和硬件相关的,所以无法通过 WMI 的方法获取当前设备的 Mac 地址 但是在 dotnet c ...
- 使用 C# 开发 Kubernetes 组件,获取集群资源信息
写什么呢 前段时间使用 C# 写了个项目,使用 Kubernetes API Server,获取信息以及监控 Kubernetes 资源,然后结合 Neting 做 API 网关. 体验地址 http ...
- linux中uptime命令获取主机运行时间和查询系统负载信息
系统中的uptime命令主要用于获取主机运行时间和查询linux系统负载等信息.uptime命令可以显示系统已经运行了多长时间,信息显示依次为:现在时间.系统已经运行了多长时间.目前有多少登陆用户.系 ...
随机推荐
- [LC] 131. Palindrome Partitioning
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
- VB.NET XOR 运算
C# 里面的 ^ 运算符,在VB.NET中可以用 XOR 表示,但是 byte x=(byte)(65535^254); 直接翻译成 dim x as Byte=CByte(65535 XOR 254 ...
- 解决一个通过 WebReference 调用 WCF 时自定义 DataContract 类参数提交的问题
先看一下VS2013自动创建默认的IService1.vb,注意自定义的数据契约 CompositeType ' 注意: 使用上下文菜单上的“重命名”命令可以同时更改代码和配置文件中的接口名“ISer ...
- python三目运算和递归的小练习
应用前: ''' 递归的简单实现,输出i = 5的时候的结果 ''' def diGui(i = 0): i = i +1 if i >=5: return ("{0}大于等于5&qu ...
- ORs-5-OR Subgenomes Variation among Birds, Sea Turtle and Alligator
OR Subgenomes Variation among Birds, Sea Turtle and Alligator 由 该图数据计算每种鸟的relative percentage,得到下图: ...
- optogenetics|
Bird &optogenetics&day&night 光遗传学(optogenetics)——结合遗传工程与光来操作个别神经细胞的活性,发现脑部如何产生γ波(gamma o ...
- 4k高分屏下,chm帮助文档,api文档打开后字体过小的解决
如图所示: 4k分辨率下,chm文件的正文部分的字体过小,这是这些网页可能使用了CSS维持字体dpi, 在普通分辨率下,可以显示正常,但在高分屏下就会显示得过小,这时我们就需要调整显示网页 的显示效果 ...
- jenkins使用(1)
术语:构建一次job指的是执行一次任务 注:到了公司,如果需要搭建jenkins环境可以找运维 jenkins使用: 创建视图 常用的两个配置: 新建任务: 可以选择构建后的步骤: 然后保存 图标状态 ...
- 吴裕雄--天生自然 神经网络人工智能项目:基于深度学习TENSORFLOW框架的图像分类与目标跟踪报告(续四)
2. 神经网络的搭建以及迁移学习的测试 7.项目总结 通过本次水果图片卷积池化全连接试验分类项目的实践,我对卷积.池化.全连接等相关的理论的理解更加全面和清晰了.试验主要采用python高级编程语言的 ...
- 格式化MyEclipse代码(java、jsp、js)行的长度@修改java代码字体@修改Properties文件编码方式
每次用MyEclipse/Eclipse自带的快捷键Ctrl+shift+f格式化代码时,如果原来的一行代码大于80列,Eclipse就会自动换为多行.如果想格式化代码后不想让代码换行可以通过以下方式 ...