You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LibreHardwareMonitor代码无法获取GPU传感器数据求助

解决LibreHardwareMonitor无法获取GPU传感器数据的问题

针对你的代码无法获取GPU数据的情况,下面列出几个关键问题及修复方案:

1. 重复定义UpdateVisitor类

你的代码在mynamespace和Program类中分别定义了同名的UpdateVisitor,这会导致类的歧义,且完全没必要重复实现。删除其中一个,保留一个即可。

2. 程序需要管理员权限运行

LibreHardwareMonitor读取GPU传感器数据(尤其是NVIDIA/AMD的硬件)需要管理员权限。右键点击你的程序或Visual Studio,选择“以管理员身份运行”,否则会因为权限不足无法获取GPU数据。

3. 调整硬件启用选项

部分GPU需要启用IsControllerEnabled才能被正确识别,同时确保你的Computer对象初始化时没有遗漏必要的配置:

Computer computer = new Computer
{
    IsCpuEnabled = false,
    IsGpuEnabled = true,
    IsMemoryEnabled = false,
    IsMotherboardEnabled = false,
    IsControllerEnabled = true, // 开启这个选项,部分GPU依赖控制器识别
    IsNetworkEnabled = false,
    IsStorageEnabled = false,
    IsPsuEnabled = false
};

4. 优化循环逻辑,避免频繁创建Computer实例

你的Main方法中无限循环调用Monitorr,每次都会重新创建并打开/关闭Computer对象,这不仅效率低下,还可能导致硬件访问冲突。应该将Computer的初始化和打开放在循环外,仅在循环内更新数据。

修正后的完整代码

using System;
using System.Threading;
using LibreHardwareMonitor;
using LibreHardwareMonitor.Hardware;

namespace mynamespace
{
    public class UpdateVisitor : IVisitor
    {
        public void VisitComputer(IComputer computer)
        {
            computer.Traverse(this);
        }
        public void VisitHardware(IHardware hardware)
        {
            hardware.Update();
            foreach (IHardware subHardware in hardware.SubHardware) 
                subHardware.Accept(this);
        }
        public void VisitSensor(ISensor sensor) { }
        public void VisitParameter(IParameter parameter) { }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // 只初始化一次Computer
            Computer computer = new Computer
            {
                IsCpuEnabled = false,
                IsGpuEnabled = true,
                IsMemoryEnabled = false,
                IsMotherboardEnabled = false,
                IsControllerEnabled = true,
                IsNetworkEnabled = false,
                IsStorageEnabled = false,
                IsPsuEnabled = false
            };

            computer.Open();
            var updateVisitor = new UpdateVisitor();

            while (true)
            {
                computer.Accept(updateVisitor);
                Console.Clear(); // 清屏方便查看实时数据

                foreach (IHardware hardware in computer.Hardware)
                {
                    Console.WriteLine("Hardware: {0} ({1})", hardware.Name, hardware.HardwareType);

                    // 遍历子硬件传感器
                    foreach (IHardware subHardware in hardware.SubHardware)
                    {
                        Console.WriteLine("\tSubhardware: {0}", subHardware.Name);
                        foreach (ISensor sensor in subHardware.Sensors)
                        {
                            Console.WriteLine("\t\tSensor: {0}, Value: {1:F2}", sensor.Name, sensor.Value ?? 0);
                        }
                    }

                    // 遍历当前硬件传感器
                    foreach (ISensor sensor in hardware.Sensors)
                    {
                        Console.WriteLine("\tSensor: {0}, Value: {1:F2}", sensor.Name, sensor.Value ?? 0);
                    }
                }

                Thread.Sleep(2000); // 每2秒刷新一次
            }

            // 实际这里因为是无限循环,不会执行到,可在退出逻辑中调用
            // computer.Close();
        }
    }
}

额外检查项

  • 确保你使用的LibreHardwareMonitor NuGet包是最新版本(可以通过NuGet包管理器更新)。
  • 确认GPU驱动是最新版本,旧驱动可能导致传感器数据无法读取。
  • 如果是笔记本电脑的双GPU(集成+独立),确保代码能识别到独立GPU,你可以通过hardware.HardwareType过滤出HardwareType.GpuNvidia/HardwareType.GpuAmd/HardwareType.GpuIntel类型的硬件。

内容的提问来源于stack exchange,提问作者ba2d35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:15:34