Получить VRAM Total с помощью пакета OpenHardwareMonitor NuGet
В настоящее время я пытаюсь получить значение общей VRAM графического процессора с помощью пакета https://www.nuget.org/packages/OpenHardwareMonitor.
Я знаю, что получить значение можно с помощью пакета, однако я довольно долго пытался и не нашел конкретного кода для выполнения задачи.
Я не ищу ответа на получение полной VRAM, используя любые другие средства, такие как WMI. Я просто ищу ответ, используя OpenHardwareMonitor.
Если у вас есть решение этой проблемы, это будет с благодарностью!
1 ответ
Проблема в том, что пакет NuGet построен из более старой версии кода. Тем временем были добавлены дополнительные датчики, которые включают информацию об общем, свободном и используемом объеме памяти графического процессора (по крайней мере для графических процессоров NVidea). Смотрите этот дифференциал
Если этот пакет когда-либо будет обновлен, вы сможете найти детали памяти в списке датчиков:
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]
объем свободной памяти графического процессора в кБ. Итак, с помощью некоторой магии регулярных выражений мы можем извлечь эту информацию:
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.