В настоящее время я пытаюсь получить значение общей VRAM графического процессора с помощью пакета Nuget OpenHardwareMonitor.
Я знаю, что можно получить значение с помощью пакета, однако я довольно долго пытался и не нашел конкретного кода для выполнения задачи.
Я не ищу ответа на получение полной VRAM с помощью каких-либо других средств, таких как WMI. Я просто ищу ответ с помощью OpenHardwareMonitor.
Если у вас есть решение этой проблемы, мы будем очень признательны!





Проблема в том, что пакет 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(), где информация о памяти графического процессора выглядит следующим образом:
Memory Info
Value[0]: 2097152
Value[1]: 2029816
Value[2]: 0
Value[3]: 8221004
Value[4]: 753168
Где Value[0] - это общий объем памяти графического процессора, а 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.
Просто служит примером, вы можете использовать foreach, если ожидаете более одного графического процессора.
Большой! Спасибо за это! У меня возник вопрос о строке кода, объявляющей var "gpu". Есть ли причина для команды "Hardware.First ...."? Я могу заставить его работать с помощью цикла foreach, но я не был уверен, есть ли какая-то конкретная цель, чтобы сделать это другим способом.