.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);


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


相关文章
|
8天前
|
C#
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
|
8天前
|
人工智能 自然语言处理 API
适用于 .NET 稳定的官方OpenAI库
适用于 .NET 稳定的官方OpenAI库
|
1月前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
|
29天前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
23 1
|
8天前
|
开发框架 安全 .NET
.NET使用Moq开源模拟库简化单元测试
.NET使用Moq开源模拟库简化单元测试~
|
1月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
|
1月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
60 8
|
1月前
|
数据库连接 开发者
.NET 内存管理两种有效的资源释放方式
【10月更文挑战第15天】在.NET中,有两种有效的资源释放方式:一是使用`using`语句,适用于实现`IDisposable`接口的对象,如文件流、数据库连接等,能确保资源及时释放,避免泄漏;二是手动调用`Dispose`方法并处理异常,提供更灵活的资源管理方式,适用于复杂场景。这两种方式都能有效管理资源,提高应用性能和稳定性。
|
1月前
|
算法 Java 数据库连接
.NET 内存管理两种有效的资源释放方式
【10月更文挑战第14天】在 .NET 中,`IDisposable` 接口提供了一种标准机制来释放非托管资源,如文件句柄、数据库连接等。此类资源需手动释放以避免泄漏。实现 `IDisposable` 的类可通过 `Dispose` 方法释放资源。使用 `using` 语句可确保资源自动释放。此外,.NET 的垃圾回收器会自动回收托管对象所占内存,提高程序效率。示例代码展示了如何使用 `MyFileHandler` 类处理文件操作并释放 `FileStream` 资源。
|
1月前
|
存储 开发框架 .NET
.NET 8 实现无实体库表 API 部署服务
【10月更文挑战第12天】在.NET 8中,可通过以下步骤实现无实体库表的API部署:首先安装.NET 8 SDK及开发工具,并选用轻量级Web API框架如ASP.NET Core;接着创建新项目并设计API,利用内存数据结构模拟数据存储;最后配置项目设置并进行测试与部署。此方法适用于小型项目或临时解决方案,但对于大规模应用仍需考虑持久化存储以确保数据可靠性与可扩展性。

热门文章

最新文章