新增 显存占用显示功能;

This commit is contained in:
2025-09-11 21:39:05 +08:00
parent 8732d67234
commit 1d84a9117e
7 changed files with 5152 additions and 243 deletions

60
main.js
View File

@@ -44,7 +44,7 @@ function createWindow() {
// 隐藏窗口标题栏和任务栏显示
titleBarStyle: 'hidden',
// 隐藏窗口在Alt+Tab切换中显示
hiddenInMissionControl: true
hiddenInMissionControl: true,
})
// 加载应用的index.html
@@ -264,33 +264,43 @@ function startGpuMonitoring() {
// 每秒获取一次GPU信息
gpuMonitorInterval = setInterval(async () => {
try {
// 获取GPU信息
const graphicsData = await si.graphics()
// 尝试使用nvidia-smi命令获取GPU信息
const { exec } = require('child_process')
exec('nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total --format=csv,noheader,nounits', (error, stdout, stderr) => {
if (error) {
console.error('执行nvidia-smi时出错:', error)
return
}
// 过滤掉虚拟GPU设备如OrayIddDriver等
const physicalGpus = graphicsData.controllers.filter(controller => {
// 忽略虚拟GPU和软件渲染器
const isVirtual = controller.model.includes('Oray') || controller.model.includes('Virtual') || controller.model.includes('Software') || controller.vendor.includes('Oray') || (controller.vram === 0 && !controller.memoryTotal)
return !isVirtual
if (stderr) {
console.error('nvidia-smi stderr:', stderr)
return
}
// 解析输出
const data = stdout
.trim()
.split(',')
.map(item => parseInt(item.trim()))
if (data.length >= 3) {
const gpuInfo = [
{
name: 'NVIDIA GPU',
utilizationGpu: data[0],
memoryUsed: data[1],
memoryTotal: data[2],
vram: data[2],
},
]
// 发送GPU信息到渲染进程
if (mainWindow && !mainWindow.isDestroyed()) {
mainWindow.webContents.send('gpu-info', gpuInfo)
}
}
})
// 提取显存信息
const gpuInfo = physicalGpus.map(controller => ({
name: controller.model,
memoryUsed: controller.memoryUsed,
memoryTotal: controller.memoryTotal,
memoryFree: controller.memoryFree,
utilizationGpu: controller.utilizationGpu,
temperature: controller.temperatureGpu,
vram: controller.vram,
}))
// 发送GPU信息到渲染进程
if (mainWindow && !mainWindow.isDestroyed()) {
mainWindow.webContents.send('gpu-info', gpuInfo)
}
} catch (error) {
console.error('获取GPU信息时出错:', error)
}
}, 1000) // 每秒更新一次
}, 200) // 每秒更新一次
}