Получите VRAM Total с помощью пакета OpenHardwareMonitor NuGet

В настоящее время я пытаюсь получить значение общей VRAM графического процессора с помощью пакета Nuget OpenHardwareMonitor.

Я знаю, что можно получить значение с помощью пакета, однако я довольно долго пытался и не нашел конкретного кода для выполнения задачи.

Я не ищу ответа на получение полной VRAM с помощью каких-либо других средств, таких как WMI. Я просто ищу ответ с помощью OpenHardwareMonitor.

Если у вас есть решение этой проблемы, мы будем очень признательны!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
301
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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(), где информация о памяти графического процессора выглядит следующим образом:

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.

Большой! Спасибо за это! У меня возник вопрос о строке кода, объявляющей var "gpu". Есть ли причина для команды "Hardware.First ...."? Я могу заставить его работать с помощью цикла foreach, но я не был уверен, есть ли какая-то конкретная цель, чтобы сделать это другим способом.

Aaron 19.07.2018 23:09

Просто служит примером, вы можете использовать foreach, если ожидаете более одного графического процессора.

huysentruitw 19.07.2018 23:14

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