【问题标题】:C# - Get total usage of GPU in percentageC# - 以百分比形式获取 GPU 的总使用量
【发布时间】:2019-11-11 19:13:41
【问题描述】:

我正在向我的程序添加一些新功能,这些功能当前通过串行连接将 CPU 使用率和 RAM 使用率发送到 Arduino(请参阅 this)。我也在尝试添加 GPU 和磁盘使用情况。磁盘使用不是问题,但从 Windows 获取 GPU 使用情况却是一个真正的麻烦。

我尝试过使用PerformanceCounter,但这似乎根本不起作用!请参阅下面的代码。

PerformanceCounter gpuCounter = new PerformanceCounter("GPU Engine", "Utilization Percentage");
string gpuUsage = gpuCounter.NextValue()

我想要这样的 GPU 使用百分比:

GPU 使用率:#.#%

有什么方法可以实现吗?

【问题讨论】:

  • 你发布的代码,它返回什么?
  • 检查您计算机中的 GPU 名称,我使用以下代码运行类似的东西并且工作正常: PerformanceCounter gpuCounter = new PerformanceCounter("NVIDIA GPU", "% GPU Usage","#0 Quadro K1100M (id=1, NVAPI ID=256)"); ...但在您的情况下,可能会有所不同。
  • 你的显卡是哪个牌子的?如果您有 NVIDIA,这可能会很有趣:stackoverflow.com/questions/36389944/…
  • 这是它返回的内容:计数器不是单个实例,需要指定实例名称。是的,我拥有什么品牌的 GPU (AMD) 并不重要,我必须让它适用于所有品牌。

标签: c# gpu


【解决方案1】:

您需要为“GPU Engine”创建一个PerformanceCounterCategory,然后对该类别调用GetInstanceNames()。然后,您可以迭代调用 GetCounters(name) 方法的名称字符串数组。

    public List<PerformanceCounter> Sample ()
    {
        var list = new List<PerformanceCounter> ();
        var category = new PerformanceCounterCategory ("GPU Engine");
        var names = category.GetInstanceNames ();
        foreach (var name in names)
            list.AddRange (category.GetCounters (name));
        return list;
    }

您的列表中将同时存在“运行时间”和“利用率百分比”计数器。您可以根据 GetCounters 返回的计数器的 CounterName 属性进行过滤。

【讨论】:

  • 注:利用率百分比为差值;您需要执行 NextSample () 而不是 NextValue (),并将百分比计算为当前原始值 - 最后一个原始值/时间跨度刻度。
  • 能分享一下这个计算逻辑的代码吗?
  • 对不起,没有。我写的属于客户。
猜你喜欢
  • 2012-04-24
  • 2015-07-28
  • 2021-06-28
  • 1970-01-01
  • 2012-05-24
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多