## 环境信息
- 应用:Qoder CN v0.3.4 (Electron 43.1.1)
- 系统:Windows 10/11 x64
- GPU:NVIDIA RTX 5070 Ti + AMD Radeon 780M
问题描述
Qoder CN 在 Windows 上的 UI 严重卡顿(尤其在设置页面切换模型选项时),原因是 GPU 硬件加速被永久禁用,回退到 CPU 软件渲染(WARP)。
根因分析
通过逆向分析 `out/main/index.js`,发现了一个 **Windows 启动兼容性机制** 会在特定条件下永久禁用 GPU 加速:
触发流程
- **首次启动** → `FIA()` 返回 `“normal”` → GPU 正常开启
- **某次启动失败**(如远程桌面虚拟显示适配器干扰 GPU 进程)→ 触发 `requestRecovery()` → 带 `–qoder-windows-startup-compatibility` 参数重启
- **恢复启动成功** → `completeStartup()` 检测到 `automatic_relaunch` 模式 → 调用 `rememberVersion()` 将当前版本号写入 `windows-startup-compatibility.json`
- **之后每次启动** → `FIA()` 检测到 `readRememberedVersion() === applicationVersion` → 返回 `“remembered”` → **永久禁用 GPU**
关键代码(out/main/index.js)
```javascript
// 判断启动模式
function FIA(e) {
return !e.enabled || e.platform !== “win32”
? “disabled”
: e.argv.includes(“–qoder-windows-startup-compatibility”)
? “automatic_relaunch”
: e.stateStore.readRememberedVersion() === e.applicationVersion
? “remembered” // ← GPU 被禁用
: “normal” // ← GPU 正常
}
// 禁用 GPU 加速
function MIA(e, t) {
if (t !== “automatic_relaunch” && t !== “remembered”) return false;
e.disableHardwareAcceleration();
e.commandLine.appendSwitch(“disable-gpu”);
e.commandLine.appendSwitch(“disable-gpu-compositing”);
e.commandLine.appendSwitch(“disable-gpu-sandbox”);
e.commandLine.appendSwitch(“no-sandbox”);
}
// 仅在 automatic_relaunch 成功完成后保存版本
completeStartup() {
if (this.options.mode === “automatic_relaunch”)
return this.options.stateStore.rememberVersion(this.options.applicationVersion);
}
```
验证证据
GPU 进程命令行参数确认:
```
–use-gl=angle --use-angle=d3d11-warp-webgl ← WARP 软件渲染
–disable-gpu-compositing ← GPU 合成被禁用
```
影响范围
**这个问题影响所有使用远程桌面软件的用户**,包括:
- 向日葵远程控制
- ToDesk
- GameViewer
- UU 远程
- 其他创建虚拟显示适配器的远程桌面工具
这些软件会安装虚拟显示适配器(如 `GameViewer Virtual Display Adapter`),导致 Chromium GPU 进程初始化失败,触发恢复机制。一旦触发,GPU 加速被永久禁用,UI 严重卡顿,且用户无法自行恢复。
建议修复
短期修复(优先级高)
- **在设置中提供"重新启用 GPU 加速"按钮** — 删除或重置 `windows-startup-compatibility.json`
- **版本更新后自动重置** — 新版本首次启动应走 `“normal”` 路径尝试重新启用 GPU
中期修复
- **缩小触发范围** — 仅在确认是 GPU 相关崩溃时才触发恢复,而非任何启动失败
- **排除已知虚拟适配器** — GPU 检测时忽略远程桌面创建的虚拟显示设备(可通过设备名称匹配 `Virtual Display`、`GameViewer`、`Sunflower` 等关键词)
长期修复
- **增加 GPU 状态指示** — 在设置中显示当前渲染模式(GPU/CPU),让用户知晓状态
- **提供降级策略** — 连续 N 次恢复启动成功后才永久禁用,而非一次就永久生效
临时解决方案(用户侧)
修改版本号使其不匹配当前版本:
```powershell
node -e “require(‘fs’).writeFileSync(process.env.APPDATA+‘/com.qodercn.app.stable/windows-startup-compatibility.json’,‘{\“schemaVersion\”:1,\“applicationVersion\”:\“0.0.0\”}’)”
```
然后重启 Qoder CN。