C# 获取Windows系统信息以及CPU、内存和磁盘使用情况

本文介绍了如何在C#中使用System.Diagnostics.PerformanceCounter和WindowsManagementInstrumentation(WMI)获取Windows系统的CPU使用率、内存和磁盘信息,包括实时性能数据和系统配置信息的获取方法。
摘要由CSDN通过智能技术生成

在C#中获取Windows系统的详细信息,包括CPU、内存和磁盘使用情况,可以利用以下几种方法:

1. 使用System.Diagnostics.PerformanceCounter

对于CPU使用率、内存使用量、磁盘读写速率等实时性能数据,可以通过System.Diagnostics.PerformanceCounter类来获取:

1using System;
2using System.Diagnostics;
3
4class Program
5{
6    static void Main()
7    {
8        // 获取CPU使用率
9        var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
10        cpuCounter.NextValue(); // 必须先调用一次,以初始化计数器
11        Thread.Sleep(1000); // 等待至少1秒以获得有效值
12        float cpuUsage = cpuCounter.NextValue();
13
14        // 获取物理内存总量与已用内存量
15        var ramCounter = new PerformanceCounter("Memory", "Available Bytes");
16        long totalMemory = (long) new PerformanceCounter("Memory", "Total Visible Memory Size").NextValue();
17        long usedMemory = totalMemory - (long) ramCounter.NextValue();
18
19        // 获取磁盘读写速度或使用情况(例如当前磁盘读取速率)
20        var diskCounterRead = new PerformanceCounter("PhysicalDisk", "Disk Reads/sec", "_Total");
21        var diskCounterWrite = new PerformanceCounter("PhysicalDisk", "Disk Writes/sec", "_Total");
22        float diskReadsPerSec = diskCounterRead.NextValue();
23        float diskWritesPerSec = diskCounterWrite.NextValue();
24
25        Console.WriteLine($"CPU Usage: {cpuUsage}%");
26        Console.WriteLine($"Memory Used: {usedMemory / (1024 * 1024)} MB out of {totalMemory / (1024 * 1024)} MB");
27        Console.WriteLine($"Disk Reads per Second: {diskReadsPerSec}");
28        Console.WriteLine($"Disk Writes per Second: {diskWritesPerSec}");
29    }
30}

2. 使用Windows Management Instrumentation (WMI)

WMI 是一种强大的管理接口,允许访问系统及其组件的大量信息,包括硬件配置、系统状态等。

1using System;
2using System.Management;
3
4class Program
5{
6    static void Main()
7    {
8        // 获取CPU信息
9        ManagementObjectSearcher searcherCpu = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
10        foreach (ManagementObject obj in searcherCpu.Get())
11        {
12            Console.WriteLine("CPU Name: " + obj["Name"]);
13            // 可以获取其他CPU属性,如MaxClockSpeed、NumberOfCores等
14        }
15
16        // 获取内存信息
17        ManagementObjectSearcher searcherMem = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
18        foreach (ManagementObject obj in searcherMem.Get())
19        {
20            Console.WriteLine("Memory Capacity: " + Convert.ToDouble(obj["Capacity"]) / (1024 * 1024) + " MB");
21        }
22
23        // 获取磁盘信息
24        ManagementObjectSearcher searcherDisk = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk WHERE DriveType=3");
25        foreach (ManagementObject obj in searcherDisk.Get())
26        {
27            Console.WriteLine($"Drive {obj["DeviceID"]}: Free Space {Convert.ToDouble(obj["FreeSpace"]) / (1024 * 1024 * 1024)} GB, Total Space {Convert.ToDouble(obj["Size"]) / (1024 * 1024 * 1024)} GB");
28        }
29    }
30}

请注意,在使用PerformanceCounter时,尤其是在不同版本的Windows上,可能需要确保性能计数器库已经正确初始化。对于某些特定计数器,特别是较旧的操作系统或服务器环境,有时需要手动启动或注册相关的性能计数器类别。

请确保项目中引用了必要的命名空间,并且在获取实时数据时,尤其是CPU使用率,通常需要一段时间间隔内的两次采样才能计算出准确的使用率。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨曦_子画

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值