.NET?Core使用CZGL.SystemInfo庫獲取主機(jī)運(yùn)行資源
簡(jiǎn)介
CZGL.SystemInfo 是一個(gè)支持 Windows 和 Linux 的資源信息獲取庫,用于獲取系統(tǒng)環(huán)境、機(jī)器資源信息、系統(tǒng)資源使用情況。
Nuget 搜索 CZGL.SystemInfo 即可安裝。
類庫中每一個(gè)屬性和方法,我都加上了注釋,調(diào)用時(shí)可以看得到。
平臺(tái)通用
CZGL.SystemInfo 命名空間下,有個(gè) EnvironmentInfo 靜態(tài)類,用于獲取各種信息。
CZGL.SystemInfo.Info 命名空間中,有三個(gè)類型,用于獲取和記錄不同類型的信息。
MachineRunInfo 用來獲取機(jī)器運(yùn)行使用的資源信息;
SystemPlatformInfo 用來獲取系統(tǒng)平臺(tái)信息;
SystemRunEvnInfo 獲取系統(tǒng)屬性信息;
EnvironmentInfo.GetEnvironmentVariables() 用于獲取系統(tǒng)所有的環(huán)境變量。
獲取某個(gè)屬性信息
你可以這樣使用
// new實(shí)例獲取
MachineRunInfo m = new MachineRunInfo();
Console.WriteLine("當(dāng)前進(jìn)程已用內(nèi)存" + m.ThisUsedMem);上面三個(gè)類型中,都有一個(gè)靜態(tài)實(shí)例,也可以這樣使用
Console.WriteLine("當(dāng)前進(jìn)程已用內(nèi)存" + MachineRunInfo.Instance.ThisUsedMem);MachineRunInfo 、SystemPlatformInfo 、 SystemRunEvnInfo 三個(gè)類型,直接使用屬性即可輸出信息。
獲取所有屬性信息
如果你想一次性輸出到控制臺(tái)或者做一個(gè)統(tǒng)計(jì),可以使用 EnvironmentInfo 中的方法來快速生成信息。
如果當(dāng)前系統(tǒng)是中文,會(huì)輸出中文備注。
// 注意,一些資源的單位都是 kb
// 獲取系統(tǒng)平臺(tái)信息
KeyValuePair<string, object>[] a = env.GetSystemPlatformInfoValue();
// 獲取系統(tǒng)運(yùn)行屬性信息
KeyValuePair<string, object>[] b = env.GetSystemRunInfoValue();
// 獲取機(jī)器資源信息
KeyValuePair<string, object>[] c = env.GetMachineInfoValue();
// 獲取系統(tǒng)所有環(huán)境變量
KeyValuePair<string, object>[] d = env.GetEnvironmentVariables();打印示例
Console.WriteLine("\n系統(tǒng)平臺(tái)信息:\n");
foreach (var item in a)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}
Console.WriteLine("\n\n系統(tǒng)運(yùn)行屬性信息:\n");
foreach (var item in b)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}
Console.WriteLine("\n\n機(jī)器資源信息:\n");
foreach (var item in c)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}
Console.WriteLine("\n\n系統(tǒng)所有環(huán)境變量:\n");
foreach (var item in d)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}輸出(部分顯示)
系統(tǒng)平臺(tái)信息: 運(yùn)行框架 : .NET Core 3.1.0 操作系統(tǒng) : Microsoft Windows 10.0.17763 操作系統(tǒng)版本 : Microsoft Windows NT 6.2.9200.0 平臺(tái)架構(gòu) : X64 系統(tǒng)運(yùn)行屬性信息: 機(jī)器名稱 : aaaa-PC 當(dāng)前關(guān)聯(lián)用戶名 : aaa 用戶網(wǎng)絡(luò)域名 : aaa-PC 系統(tǒng)已運(yùn)行時(shí)間(毫秒) : 3227500 Web程序核心框架版本 : 3.1.0 是否在交互模式中運(yùn)行 : True 分區(qū)磁盤 : D:\, E:\, F:\, G:\, H:\, X:\ 系統(tǒng)目錄 : X:\windows\system32 機(jī)器資源信息: 當(dāng)前進(jìn)程已使用物理內(nèi)存 : 20020 當(dāng)前進(jìn)程已占耗CPU時(shí)間 : 328.125 系統(tǒng)所有進(jìn)程各種使用的內(nèi)存 : System.Collections.Generic.KeyValuePair`2[System.String,System.Int64][] 系統(tǒng)已使用內(nèi)存 : 5988340 系統(tǒng)所有環(huán)境變量: VisualStudioVersion : 16.0 CommonProgramFiles(x86) : x:\Program Files (x86)\Common Files
還可以使用 (string, KeyValuePair<string, object>[]) GetMachineInfo() 等,string 返回此類型信息的說明。
Linux
Nuget 搜索 CZGL.SystemInfo.Linux 安裝。
在這個(gè)庫中,Linux 資源信息包括 進(jìn)程計(jì)量,內(nèi)存計(jì)量,CPU計(jì)量,虛擬內(nèi)存計(jì)量,各種進(jìn)程運(yùn)行信息計(jì)量。
要通過實(shí)例化 DynamicInfo 才能獲取。
有 5 個(gè)對(duì)象用于映射相應(yīng)信息。
- Tasks:用于統(tǒng)計(jì)進(jìn)程數(shù)量,處于不同狀態(tài)下的進(jìn)程數(shù)。
- CpuState:CPU 使用情況,CPU 各種負(fù)載信息。
- Mem:物理內(nèi)存和緩存使用情況。
- Swap:虛擬內(nèi)存使用情況。
- PidInfo:一個(gè)進(jìn)程的運(yùn)行資源信息。
他們都有一個(gè) IsSuccess 屬性,用來判斷是否能正常獲取到 Linux 的信息。
實(shí)例化獲取對(duì)象
DynamicInfo info = new DynamicInfo();
直接使用
可以通過方法獲取到相應(yīng)的對(duì)象。
var item = info.GetTasks();
Console.WriteLine("系統(tǒng)中共有進(jìn)程數(shù) :" + item.Total);
Console.WriteLine("正在運(yùn)行的進(jìn)程數(shù) :" + item.Running);批量獲取
以下是批量獲取的示例,每個(gè)屬性和屬性值生成一個(gè)鍵值對(duì),可以批量獲取信息列表。
如果當(dāng)前系統(tǒng)是中文,會(huì)輸出中文備注。
// 獲取進(jìn)程統(tǒng)計(jì)
KeyValuePair<string, object>[] a = info.GetRefTasks();
// 獲取CPU資源統(tǒng)計(jì)
KeyValuePair<string, object>[] b = info.GetRefCpuState();
// 獲取內(nèi)存統(tǒng)計(jì)
KeyValuePair<string, object>[] c = info.GetRefMem();
// 獲取虛擬內(nèi)存統(tǒng)計(jì)
KeyValuePair<string, object>[] d = info.GetRefSwap();
Dictionary<int, PidInfo> dic = info.GetPidInfo();
Console.WriteLine("\n進(jìn)程統(tǒng)計(jì):\n");
foreach (var item in a)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}
Console.WriteLine("\n\nCPU資源統(tǒng)計(jì):\n");
foreach (var item in b)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}
Console.WriteLine("\n\n內(nèi)存統(tǒng)計(jì):\n");
foreach (var item in c)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}
Console.WriteLine("\n\n獲取虛擬內(nèi)存統(tǒng)計(jì):\n");
foreach (var item in d)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}
Console.WriteLine("\n\n 各個(gè)進(jìn)程使用的資源:\n");
Console.WriteLine(" 進(jìn)程Id 進(jìn)程名稱 所屬用戶 優(yōu)化級(jí) 高低優(yōu)先級(jí) 虛擬內(nèi)存 物理內(nèi)存 共享內(nèi)存 進(jìn)程狀態(tài) 占用系統(tǒng)CPU(%) 占用內(nèi)存(%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}");
}
}輸出
進(jìn)程統(tǒng)計(jì): Total : 93 Running : 1 Sleeping : 59 Stopped : 0 Zombie : 0 CPU資源統(tǒng)計(jì): UserSpace : 1 Sysctl : 0.6 NI : 0 Idolt : 98.3 WaitIO : 0.1 HardwareIRQ : 0 SoftwareInterrupts : 0 內(nèi)存統(tǒng)計(jì): Total : 1009048 Used : 334040 Free : 85408 Buffers : 589600 CanUsed : 675008 獲取虛擬內(nèi)存統(tǒng)計(jì): Total : 0 Used : 0 Free : 0 AvailMem : 505744
到此這篇關(guān)于.NET Core使用CZGL.SystemInfo庫獲取主機(jī)運(yùn)行資源的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家
相關(guān)文章
.Net行為型設(shè)計(jì)模式之狀態(tài)模式(State)
這篇文章介紹了.Net行為型設(shè)計(jì)模式之狀態(tài)模式(State),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
WPF框架Prism中ViewModelLocator用法介紹
這篇文章介紹了WPF框架Prism中ViewModelLocator的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02
ASP.NET Core中的Options選項(xiàng)模式
這篇文章介紹了ASP.NET Core中的Options選項(xiàng)模式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
ASP.NET中FileUpload文件上傳控件應(yīng)用實(shí)例
本文主要介紹FileUpload文件上傳控件在實(shí)際開發(fā)中經(jīng)常遇到的問題并給出解決方法,希望對(duì)大家有所幫助。2016-04-04
ASP.NET MVC中_ViewStart.cshtml作用介紹
這篇文章介紹了ASP.NET MVC中_ViewStart.cshtml的作用,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
部署ASP.NET?Core程序到Linux系統(tǒng)
這篇文章介紹了部署ASP.NET?Core程序到Linux系統(tǒng)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
詳解ABP框架中的數(shù)據(jù)過濾器與數(shù)據(jù)傳輸對(duì)象的使用
ABP框架是一個(gè)基于ASP.NET的Web開發(fā)框架,這里我們來詳解ABP框架中的數(shù)據(jù)過濾器與數(shù)據(jù)傳輸對(duì)象的使用,需要的朋友可以參考下2016-06-06

