C# - 以百分比形式获取 GPU 的总使用量

Posted

技术标签:

【中文标题】C# - 以百分比形式获取 GPU 的总使用量【英文标题】:C# - Get total usage of GPU in percentage 【发布时间】: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,这可能会很有趣:***.com/questions/36389944/… 这是它返回的内容:计数器不是单个实例,需要指定实例名称。是的,我拥有什么品牌的 GPU (AMD) 并不重要,我必须让它适用于所有品牌。 【参考方案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 (),并将百分比计算为当前原始值 - 最后一个原始值/时间跨度刻度。 能分享一下这个计算逻辑的代码吗? 对不起,没有。我写的属于客户。

以上是关于C# - 以百分比形式获取 GPU 的总使用量的主要内容,如果未能解决你的问题,请参考以下文章

Angular - 如何以百分比形式制作输入字段格式,但在编辑时删除百分比?

如何使用 Linux 命令获取可用内存百分比? [关闭]

我可以获得一些关于如何通过在 C# 中使用 webhook API 从 Forge 获取文件翻译进度百分比的帮助/示例吗?

使用 pandas 的每个季节每个集群的总集群百分比

SQLServer ------------ 将数字转换成 百分比的形式

SQLServer ------------ 将数字转换成 百分比的形式