CZGL.SystemInfo:跨平台的系统信息获取库
在软件开发和系统管理中,获取系统信息是一项常见的需求。无论是用于性能监控、硬件资产管理还是自动化部署,能够快速准确地获取机器的硬件和资源信息都至关重要。今天,我们将介绍一个名为 CZGL.SystemInfo
的开源项目,它是一个支持 Windows 和 Linux 等平台的库,能够高效地获取机器硬件信息、采集资源信息以及监控进程资源。
项目概述
CZGL.SystemInfo
是一个跨平台的系统信息获取库,由开发者 whuanle 创建并维护。该项目的目标是在不引入额外依赖的情况下,使用 .NET Runtime 本身的 API 或通过计算获得信息,提供高性能的计算方式以及缓存机制,从而提高性能。此外,该项目还提供了一个 dotnet tool
工具,方便用户通过命令行在终端中使用。
项目地址:https://github.com/whuanle/CZGL.SystemInfo.git
项目特点
跨平台支持
CZGL.SystemInfo
支持 Windows 和 Linux 等主流操作系统,具有良好的跨平台兼容性。这意味着无论是在 Windows 服务器还是 Linux 服务器上,都可以使用同一个库来获取系统信息,无需为不同平台编写不同的代码。
无额外依赖
项目在设计上尽量避免引入额外的第三方依赖,仅使用 .NET Runtime 本身的 API 或通过计算获得信息。这不仅减少了项目的复杂性,还降低了因依赖冲突导致的问题,确保了项目的稳定性和可靠性。
高性能计算
为了提高性能,CZGL.SystemInfo
提供了高性能的计算方式以及缓存机制。通过缓存常用的系统信息,避免了重复计算,从而显著提高了系统的响应速度和性能。
命令行工具
项目提供了一个 dotnet tool
工具,用户可以通过命令行在终端中快速使用该库的功能。这使得 CZGL.SystemInfo
不仅可以集成到开发项目中,还可以作为独立的工具使用,方便系统管理员和开发者快速获取系统信息。
丰富的功能
- 硬件信息获取:可以获取 CPU 型号、核心数、磁盘序列号、内存大小等硬件信息。
- 资源信息采集:可以实时采集 CPU 使用率、内存使用情况、磁盘 I/O 等资源信息。
- 进程资源监控:可以监控特定进程的资源使用情况,如 CPU 使用率、内存占用等。
技术实现
Windows 平台
在 Windows 平台上,CZGL.SystemInfo
主要使用以下两个 .NET 类来获取系统信息:
System.Diagnostics.PerformanceCounter
:用于获取系统性能数据,如 CPU 使用率、内存使用情况、磁盘 I/O 等。System.Management.ManagementObjectSearcher
:用于查询系统硬件信息,如 CPU 型号、磁盘序列号、主板信息等。
Linux 平台
在 Linux 平台上,CZGL.SystemInfo
通过以下方式获取系统信息:
- 读取
/proc
文件系统:通过读取/proc/cpuinfo
、/proc/meminfo
等文件获取硬件和资源信息。 - 系统命令:使用系统命令(如
lscpu
、df
等)获取额外的系统信息。
使用方法
安装
通过 NuGet 安装
在 Visual Studio 中,可以通过 NuGet 包管理器搜索并安装 CZGL.SystemInfo
。也可以在项目目录下打开终端,运行以下命令来安装:
dotnet add package CZGL.SystemInfo
或者指定版本安装:
dotnet add package CZGL.SystemInfo --version 1.0.1
使用 dotnet tool 安装
CZGL.SystemInfo
提供了一个简单的 dotnet tool 工具,无需 SDK,仅需 .NET runtime 即可使用。安装命令如下:
dotnet tool install --global csys
也可以指定版本安装:
dotnet tool install --global csys --version 1.0.3
安装完成后,可以通过命令 csys
调用该工具。如果在 Linux 下安装,还需要设置环境变量:
export PATH="$PATH:/home/{你的用户名}/.dotnet/tools"
然后输入 csys
命令进入小工具,根据提示输入相应命令即可查看系统资源信息。
从源码编译安装
如果需要从源码编译安装,可以先克隆项目到本地:
git clone https://github.com/whuanle/CZGL.SystemInfo.git
然后进入项目目录,使用以下命令进行编译:
dotnet build
编译成功后,可以在项目输出目录中找到编译生成的 DLL 文件,将其引用到你的项目中即可。
使用示例
获取 CPU 信息
using CZGL.SystemInfo;var cpuInfo = SystemInfo.GetCpuInfo();
Console.WriteLine($"CPU Model: {cpuInfo.Model}");
Console.WriteLine($"CPU Cores: {cpuInfo.CoreCount}");
获取内存信息
var memoryInfo = SystemInfo.GetMemoryInfo();
Console.WriteLine($"Total Memory: {memoryInfo.TotalMemory} MB");
Console.WriteLine($"Free Memory: {memoryInfo.FreeMemory} MB");
获取磁盘信息
var diskInfo = SystemInfo.GetDiskInfo();
foreach (var disk in diskInfo)
{Console.WriteLine($"Disk Name: {disk.Name}");Console.WriteLine($"Total Size: {disk.TotalSize} GB");Console.WriteLine($"Free Space: {disk.FreeSpace} GB");
}
命令行工具使用
安装完成后,可以通过以下命令使用 csys
工具:
csys --cpu
csys --memory
csys --disk
适用场景
系统监控
CZGL.SystemInfo
可以用于监控服务器或个人电脑的硬件和资源使用情况。通过实时采集 CPU 使用率、内存使用情况、磁盘 I/O 等信息,系统管理员可以及时发现性能瓶颈并采取相应的措施。
性能分析
开发者可以使用 CZGL.SystemInfo
来分析应用程序的性能。通过监控特定进程的资源使用情况,可以快速定位性能问题并进行优化。
自动化部署
在自动化脚本中使用 CZGL.SystemInfo
,可以快速获取系统信息并进行相应的操作。例如,在部署新服务器时,可以自动获取硬件信息并记录到资产管理系统中。
硬件资产管理
CZGL.SystemInfo
可以用于记录和管理硬件资产信息。通过获取 CPU 型号、磁盘序列号等信息,可以方便地管理硬件资产,确保资产信息的准确性和完整性。
优势
轻量级
CZGL.SystemInfo
不依赖额外的第三方库,减少了项目的复杂性和依赖冲突的风险,确保了项目的稳定性和可靠性。
高性能
通过缓存和优化计算方式,CZGL.SystemInfo
提高了性能,减少了资源消耗。这使得它可以在高频率的监控场景中高效运行,而不会对系统性能产生负面影响。
易用性
CZGL.SystemInfo
提供了简单的 API 和命令行工具,易于集成和使用。无论是开发者还是系统管理员,都可以快速上手并使用该库的功能。
结语
CZGL.SystemInfo
是一个功能强大、跨平台、高性能的系统信息获取库。它不仅提供了丰富的功能,还具有轻量级、高性能和易用性的特点。无论是用于系统监控、性能分析、自动化部署还是硬件资产管理,CZGL.SystemInfo
都是一个值得尝试的工具。如果你对系统信息获取感兴趣,或者需要在项目中集成系统信息获取功能,不妨尝试一下 CZGL.SystemInfo
,它可能会给你带来意想不到的惊喜。