Получить 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.

Другие вопросы по тегам