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

C#服务中LibreHardwareMonitorLib的GPU Package功率传感器返回0问题

问题:C#服务中使用LibreHardwareMonitorLib读取GPU功耗始终返回0.0,控制台应用正常

问题背景

基于LibreHardwareMonitorLib开发的C#服务,采集GPU功耗数据时,GPU Package对应的Power传感器始终返回0.0,但相同逻辑在控制台应用中能正常读取有效值。服务日志显示该传感器存在,但无法进入对应的if判断分支,其他传感器(如GPU负载、显存、温度等)均工作正常。

对比代码发现:控制台应用使用Contains("GPU Package")判断传感器名称,而服务使用Equals("GPU Package")。

原因分析

  1. 字符串匹配规则差异:Equals要求字符串完全精确匹配,而Contains仅需目标子串存在即可。
  2. 传感器名称存在细微差异:LibreHardwareMonitor返回的传感器名称可能因运行环境(服务/控制台)、GPU型号本地化、权限不同,出现额外后缀(如GPU Package (NVIDIA))、前后空格或大小写不一致的情况,导致Equals匹配失败。
  3. 服务日志未输出传感器具体名称:当前服务日志仅打印最终采集数据,无法直接确认GPU Package传感器的实际返回名称,但从控制台与服务的逻辑差异可锁定为匹配规则问题。

解决方案

1. 统一匹配逻辑为Contains

将服务中GPU功耗的判断代码修改为与控制台一致的Contains,确保只要名称包含GPU Package即可匹配:

// 原服务代码
if (sensor.SensorType == SensorType.Power && sensor.Name.Equals("GPU Package"))
// 修改后
if (sensor.SensorType == SensorType.Power && sensor.Name.Contains("GPU Package"))

2. 添加日志排查实际传感器名称

在服务的GPU传感器遍历逻辑中,打印每个传感器的完整名称,确认GPU Package的实际返回值:

Logger.Log($"GPU Sensor Detail: Name='{sensor.Name}', Type={sensor.SensorType}, Value={sensor.Value}");

3. 可选:不区分大小写的匹配

若存在大小写差异问题,可使用不区分大小写的匹配方式:

if (sensor.SensorType == SensorType.Power 
    && sensor.Name.IndexOf("GPU Package", StringComparison.OrdinalIgnoreCase) >= 0)

4. 检查服务运行权限

尝试以管理员权限运行服务,低权限可能导致LibreHardwareMonitor返回的传感器数据或名称出现异常。

验证

修改后重新运行服务,查看GPU功耗数据是否正常读取,同时通过日志确认传感器名称的匹配情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:34:51