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

如何获取占用GPU的进程列表?求游戏检测替代方法及相关文档

检测占用GPU的进程及游戏运行的替代方案

以下是几种可靠的实现方式,无需依赖失效的性能计数器类:

1. 使用显卡厂商自带命令行工具

  • 针对NVIDIA显卡,执行nvidia-smi命令,输出包含进程PID、显存占用、GPU使用率等信息,可解析输出提取目标进程。
  • 针对AMD显卡,使用amdgpu-top(需安装AMD官方驱动工具包),同样能获取进程级GPU占用数据。
  • C#代码示例:
    var process = new Process();
    process.StartInfo.FileName = "nvidia-smi";
    process.StartInfo.Arguments = "--query-compute-apps=pid,process_name,used_memory --format=csv,noheader,nounits";
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.UseShellExecute = false;
    process.Start();
    string output = process.StandardOutput.ReadToEnd();
    process.WaitForExit();
    // 解析output提取进程信息
    

2. 调用Windows性能计数器的稳定类

放弃Win32_PerfFormattedData_GPUPerformanceCounters_GPUEngine,改用Win32_PerfFormattedData_Counters_Process结合GPU使用率计数器:

  • 访问\Process(*)\GPU Usage计数器,直接获取每个进程的GPU使用率,筛选使用率高于阈值(如5%)的进程,再结合进程名称判断是否为游戏。
  • C#代码示例:
    var category = new PerformanceCounterCategory("Process");
    string[] instanceNames = category.GetInstanceNames();
    foreach (string instance in instanceNames)
    {
        try
        {
            var gpuCounter = new PerformanceCounter("Process", "GPU Usage", instance);
            float usage = gpuCounter.NextValue();
            if (usage > 5) // 自定义阈值
            {
                Console.WriteLine($"进程: {instance}, GPU使用率: {usage}%");
            }
        }
        catch (Exception)
        {
            // 跳过无法获取的进程
            continue;
        }
    }
    

3. 借助Windows系统API查询GPU进程

通过psapi.dll的GetProcessMemoryInfo获取进程显存占用(需Windows 10及以上),或调用dxgi.dll的DirectX API枚举GPU资源并关联到具体进程,这种方式精度更高,但实现复杂度稍高。

4. 结合进程特征辅助判断

获取GPU占用数据的同时,可通过进程名称(如含Game、Launcher关键词)、窗口标题、进程安装路径(游戏多在特定目录)等特征辅助确认是否为游戏进程,减少误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:20:40