Skip to content

feat: Add PreferredGpu setting for multi-GPU systems (dGPU/iGPU selection)#409

Open
haihaihailailo wants to merge 9 commits intoDiorser:masterfrom
haihaihailailo:master
Open

feat: Add PreferredGpu setting for multi-GPU systems (dGPU/iGPU selection)#409
haihaihailailo wants to merge 9 commits intoDiorser:masterfrom
haihaihailailo:master

Conversation

@haihaihailailo
Copy link
Copy Markdown

背景

多显卡笔记本(AMD/Intel 核显 + NVIDIA 独显的组合)当前无法选择 GPU 监控项显示哪块显卡。在我的设备上(AMD Ryzen 7 H 255 + Radeon 780M + NVIDIA RTX 5060 Laptop,独显直连模式),GPU 分组默认锁定 AMD 核显,无法读取到独显数据。

「系统硬件详情」面板能正常识别两块显卡的所有传感器,说明 LibreHardwareMonitorLib 已经拿到了数据,只是上层没提供切换入口。

实现方案

新增 Settings.PreferredGpu 配置字段,完全参照现有 PreferredDisk / PreferredCpuFan 等首选设备字段的模式。在「设置 → 硬件与系统」面板增加「首选显卡」下拉框,UI 实现照抄现有磁盘/网卡下拉。

核心过滤逻辑放在 SensorMap.Rebuild 中:遍历硬件时,若 PreferredGpu 非空,跳过名称不匹配的 GPU 硬件,确保所有 GPU.* 传感器键都绑定到用户指定的显卡。

HardwareValueProvider.OnUpdateTickStarted 检测到 PreferredGpu 变更时,触发 SensorMap.Rebuild 并重新 PreCacheAllSensors,用户改变选择后无需重启软件即可生效。

改动文件

  • src/Core/Settings.cs - 新增 PreferredGpu 字段
  • src/System/HardwareServices/HardwareScanner.cs - 新增 ListAllGpus 方法
  • src/System/HardwareServices/SensorMap.cs - Rebuild 支持按 PreferredGpu 过滤 + 新增 Invalidate() 方法
  • src/System/HardwareServices/HardwareValueProvider.cs - 检测 GPU 变更并触发重建
  • src/System/HardwareMonitor.cs - 暴露 ListAllGpus 静态方法
  • src/UI/Settings/SystemHardwarPage.cs - 新增 GPU 下拉框
  • resources/lang/zh.json / en.json - 新增 Menu.GpuSource 翻译

兼容性

  • 默认值 "" = 自动模式 = 原有行为,对现有用户无感知
  • 单显卡用户下拉只有「自动模式」一个选项,无副作用
  • 不引入新依赖
  • 编译通过,无新增 error 或 warning
  • 遵循 SETTINGS_README_DEV.md 的 Draft-Commit 规范(仅加配置字段 + UI 绑定,SettingsChanger.Merge 会自动通过反射处理新字段)

测试

在 AMD 780M + RTX 5060 Laptop 笔记本上验证:

  • 默认「自动模式」:显示 AMD 核显(与修改前行为完全一致)
  • 选择「NVIDIA GeForce RTX 5060 Laptop GPU」:GPU 温度/负载/功耗/频率/显存/风扇全部切到独显
  • 切回「AMD Radeon 780M Graphics」:无缝切换回核显
  • 热切换无需重启软件

对比任务管理器和其它监控软件的 NVIDIA GPU 数据一致(排除采样时刻差异)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant