.NET Core使用CZGL.SystemInfo庫獲取主機運行資源

簡介

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

到此這篇關於.NET Core使用CZGL.SystemInfo庫獲取主機運行資源的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet

推薦閱讀: