使用OpenHardwareMonitor NuGet软件包获取VRAM Total

时间:2018-07-19 19:43:02

标签: c# openhardwaremonitor

我目前正在尝试使用Nuget软件包OpenHardwareMonitor来获取GPU的总VRAM的值。

我知道可以通过使用包来获取值,但是,我已经尝试了很长时间,并且没有找到完成任务的特定代码。

我不是在寻找使用其他任何方式(例如WMI)获得总VRAM的答案。我只是在寻找使用OpenHardwareMonitor的答案。

如果您有解决此问题的方法,将不胜感激!

1 个答案:

答案 0 :(得分:1)

问题在于NuGet软件包是从旧版本的代码构建的。同时,添加了其他传感器,包括有关总的,可用的和已使用的GPU内存的详细信息(至少对于NVidea GPU而言)。参见this diff

如果该软件包曾经被更新过,您应该能够在传感器列表中找到内存详细信息:

var computer = new Computer();
computer.GPUEnabled = true;
computer.Open();
var gpu = computer.Hardware.First(x => x.HardwareType == HardwareType.GpuNvidia);
var totalVideoRamInMB = gpu.Sensors.First(x => x.Name.Equals("GPU Memory Total")).Value / 1024;
computer.Close();

在此之前,一种解决方法是从GetReport()结果中提取内存信息,其中GPU内存信息如下所示:

Memory Info

 Value[0]: 2097152
 Value[1]: 2029816
 Value[2]: 0
 Value[3]: 8221004
 Value[4]: 753168

其中Value[0]是GPU的总内存,而Value[4]是kB的可用GPU内存。因此,使用一些正则表达式魔术,我们可以提取该信息:

var pattern = @"Memory Info.*Value\[0\]:\s*(?<total>[0-9]+).*Value\[4\]:\s*(?<free>[0-9]+)";
var computer = new Computer();
computer.GPUEnabled = true;
computer.Open();
var gpu = computer.Hardware.First(x => x.HardwareType == HardwareType.GpuNvidia);
var report = gpu.GetReport();
var match = Regex.Match(report, pattern, RegexOptions.Singleline);
var totalVideoRamInMB = float.Parse(match.Groups["total"].Value) / 1024;
var freeVideoRamInMB = float.Parse(match.Groups["free"].Value) / 1024;
computer.Close();

请注意,OpenHardwareMonitor仅实现NVidea GPU的GPU内存信息。