使用 OpenHardwareMonitor NuGet 包获取 VRAM Total
Get VRAM Total using OpenHardwareMonitor NuGet package
我目前正在尝试使用 Nuget 包 OpenHardwareMonitor 获取 GPU 的总 VRAM 的值。
我知道可以通过使用包来获取值,但是我试了好久,一直没有找到完成任务的具体代码。
我不是在寻找使用任何其他方式(例如 WMI)获取总 VRAM 的答案。我只是在寻找使用 OpenHardwareMonitor 的答案。
如果您有解决此问题的方法,将不胜感激!
问题是 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]
是空闲 GPU 内存量(以 kB 为单位)。因此,通过一些正则表达式魔法,我们可以提取该信息:
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 内存信息。
我目前正在尝试使用 Nuget 包 OpenHardwareMonitor 获取 GPU 的总 VRAM 的值。
我知道可以通过使用包来获取值,但是我试了好久,一直没有找到完成任务的具体代码。
我不是在寻找使用任何其他方式(例如 WMI)获取总 VRAM 的答案。我只是在寻找使用 OpenHardwareMonitor 的答案。
如果您有解决此问题的方法,将不胜感激!
问题是 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]
是空闲 GPU 内存量(以 kB 为单位)。因此,通过一些正则表达式魔法,我们可以提取该信息:
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 内存信息。