zoukankan      html  css  js  c++  java
  • .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("
    系统平台信息:
    ");
                foreach (var item in a)
                {
                    Console.WriteLine($"{item.Key}    :    {item.Value}");
                }
    
                Console.WriteLine("
    
    系统运行属性信息:
    ");
                foreach (var item in b)
                {
                    Console.WriteLine($"{item.Key}    :    {item.Value}");
                }
    
                Console.WriteLine("
    
    机器资源信息:
    ");
                foreach (var item in c)
                {
                    Console.WriteLine($"{item.Key}    :    {item.Value}");
                }
    
                Console.WriteLine("
    
    系统所有环境变量:
    ");
                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:windowssystem32
    
    
    机器资源信息:
    
    当前进程已使用物理内存    :    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("
    进程统计:
    ");
                foreach (var item in a)
                {
                    Console.WriteLine($"{item.Key}    :    {item.Value}");
                }
    
                Console.WriteLine("
    
    CPU资源统计:
    ");
                foreach (var item in b)
                {
                    Console.WriteLine($"{item.Key}    :    {item.Value}");
                }
    
                Console.WriteLine("
    
    内存统计:
    ");
                foreach (var item in c)
                {
                    Console.WriteLine($"{item.Key}    :    {item.Value}");
                }
    
                Console.WriteLine("
    
    获取虚拟内存统计:
    ");
                foreach (var item in d)
                {
                    Console.WriteLine($"{item.Key}    :    {item.Value}");
                }
    
                Console.WriteLine("
    
     各个进程使用的资源:
    ");
                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 暂时不写了。剪头发去了。

  • 相关阅读:
    C#中的委托和事件(续)【来自张子扬】
    C# 中的委托和事件[转自张子扬]
    .NET多线程编程入门
    python——configparser模块
    logger模块
    python——time模块
    os模块
    python——re模块
    selenium环境搭建
    iOS中的三大定时器
  • 原文地址:https://www.cnblogs.com/whuanle/p/12435413.html
Copyright © 2011-2022 走看看