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 - 如何以百分比形式制作输入字段格式,但在编辑时删除百分比?
我可以获得一些关于如何通过在 C# 中使用 webhook API 从 Forge 获取文件翻译进度百分比的帮助/示例吗?