Q:c# 如何获取系统cpu,内存及显卡使用情况
在 C# 中,你可以使用 .NET Framework 的 System.Diagnostics.PerformanceCounter 类来获取 CPU、内存和显卡的使用情况。

下面是一个示例,展示了如何使用 PerformanceCounter 类获取 CPU 和内存使用率:

using System;
using System.Diagnostics;

namespace PerformanceCounterExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 PerformanceCounter 对象来监测 CPU 使用率
            PerformanceCounter cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");

            // 创建 PerformanceCounter 对象来监测内存使用率
            PerformanceCounter memCounter = new PerformanceCounter("Memory", "% Committed Bytes In Use");

            // 输出当前 CPU 和内存使用率
            Console.WriteLine("CPU Usage: " + cpuCounter.NextValue() + "%");
            Console.WriteLine("Memory Usage: " + memCounter.NextValue() + "%");
        }
    }
}

注意,这些性能计数器只能监测系统当前的使用情况,如果你想要获取历史使用情况,你可以使用一个循环来不断调用 NextValue 方法,并记录每次返回的值。

如果你想要获取显卡使用情况,你可以使用类似的方式,使用 PerformanceCounter 类监测显卡的性能指标,例如显存使用量、帧率等。
你可以使用下面的代码来获取显卡帧率:

// 创建 PerformanceCounter 对象来监测显卡帧率
PerformanceCounter fpsCounter = new PerformanceCounter("GPU Engine", "Gpu Time", "0");

// 输出当前显卡帧率
Console.WriteLine("GPU FPS: " + fpsCounter.NextValue() + " fps");

注意,上面的代码仅适用于 NVIDIA 显卡。如果你使用的是其他品牌的显卡,可能需要使用不同的性能计数器。

另外,还有一种方法可以在 C# 中获取系统的 CPU、内存和显卡使用情况,那就是使用 Windows Management Instrumentation (WMI)。

使用 WMI,你可以通过执行 WQL 查询来获取系统信息。下面是一个示例,展示了如何使用 WMI 获取 CPU 使用率:

using System;
using System.Management;

namespace WMISample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 ManagementObjectSearcher 对象来查询 WMI 信息
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor");

            // 遍历查询结果
            foreach (ManagementObject queryObj in searcher.Get())
            {
                Console.WriteLine("CPU Usage: " + queryObj["PercentProcessorTime"] + "%");
            }
        }
    }
}

使用 WMI 获取内存和显卡使用情况的方法也是类似的。你可以使用不同的 WQL 查询来获取相应的信息。

Q:PerformanceCounter instanceName 有哪些
在使用 PerformanceCounter 类获取系统性能信息时,你需要指定一个 instanceName 参数来表示要监测的实例。

具体来说,instanceName 参数指定了要监测的计算机硬件设备或软件组件的名称。

例如,如果你要监测 CPU 使用率,你可以将 instanceName 设置为 _Total,表示监测整个系统的 CPU 使用率。如果你要监测某一个具体的 CPU 核心的使用率,你可以将 instanceName 设置为对应的核心编号,例如 0、1 等。

如果你要监测内存使用率,你可以将 instanceName 设置为 _Total,表示监测整个系统的内存使用率。

如果你要监测网络流量,你可以将 instanceName 设置为网卡的名称,例如 Ethernet、Wi-Fi 等。

如果你要监测磁盘使用情况,你可以将 instanceName 设置为磁盘的名称,例如 C:、D: 等。

这些只是一些常见的情况,实际上,你可以使用的 instanceName 取值可能还有其他情况。你可以查询系统中可用的性能计数器,并查看它们支持的 instanceName 取值。

在使用 PerformanceCounter 类获取系统性能信息时,你需要指定一个 counterName 参数来表示要监测的性能指标。

具体来说,counterName 参数指定了要监测的性能指标的名称。

例如,如果你要监测 CPU 使用率,你可以将 counterName 设置为 % Processor Time。如果你要监测内存使用率,你可以将 counterName 设置为 % Committed Bytes In Use。

如果你要监测网络流量,你可以将 counterName 设置为 Bytes Received/sec 或 Bytes Sent/sec,分别表示监测接收和发送的字节数。

如果你要监测磁盘使用情况,你可以将 counterName 设置为 % Disk Time 或 % Disk Read Time,分别表示监测磁盘总时间和磁盘读时间。

这些只是一些常见的情况,实际上,你可以使用的 counterName 取值可能还有其他情况。你可以查询系统中可用的性能计数器,并查看它们支持的 counterName 取值。

例如,你可以使用下面的代码查询系统中可用的性能计数器:

PerformanceCounterCategory[] categories = PerformanceCounterCategory.GetCategories();
  foreach (PerformanceCounterCategory category in categories)
        {
            // 输出类别名




            // 获取当前类别中的所有性能计数器
            PerformanceCounter[] counters = category.GetCounters();

            // 遍历每个性能计数器
            foreach (PerformanceCounter counter in counters)
            {
                // 输出性能计数器名称
                Console.WriteLine(counter.CounterName);
            }
        }

这样,你就可以查看系统中所有可用的性能计数器,并查看它们的名称。你可以根据需要,选择使用哪些性能计数器来监测系统的性能。