Проблемы с датчиком типовой силы для графического процессора в LibrehardwaremonitorlibC#

Место общения программистов C#
Ответить
Anonymous
 Проблемы с датчиком типовой силы для графического процессора в Librehardwaremonitorlib

Сообщение Anonymous »

Я работаю с сервисом C#, которая использует библиотеку Librehardwaremonitorlib для сбора аппаратных метрик, включая данные о энергопотреблении графического процессора. Тем не менее, я столкнулся с проблемой с датчиком мощности, соответствующим пакету графического процессора, который всегда возвращает значение 0,0 в службе, даже если тот же код работает нормально в приложении консоли. < /P>
В приложении консоли датчик мощности с именем пакета GPU обнаружен и возвращает правильное значение мощности. Однако в службе, хотя датчик присутствует (в соответствии с журналами), он не вводит условие, которое проверяет этот датчик и никогда не получает значение, отличное от 0,0. < /P>
Используемый код одинаков в обоих приложениях (консоль и сервис), и все остальные датчики работают правильно, что делает это поведение необъяснимым. В частности, датчик мощности GPU не функционирует, как ожидалось в службе, тогда как он работает нормально в приложении консоли, где он получает правильные значения. Вывод: < /p>
using LibreHardwareMonitor.Hardware;
using System;

namespace prueba
{
internal class Program
{
static void Main(string[] args)
{
float gpuLoad = 0.0f, gpuVramUsed = 0.0f, gpuVramTotal = 0.0f;
float gpuClock = 0.0f, gpuPower = 0.0f, gpuTemp = 0.0f;

Computer computer = new Computer
{
IsGpuEnabled = true
};
computer.Open();

foreach (IHardware hardware in computer.Hardware)
{
if (hardware.HardwareType == HardwareType.GpuNvidia || hardware.HardwareType == HardwareType.GpuAmd)
{
Console.WriteLine($"GPU detectada: {hardware.Name}");
Console.WriteLine("Sensores disponibles:");

hardware.Update(); // Actualiza los sensores antes de leerlos

foreach (ISensor sensor in hardware.Sensors)
{
Console.WriteLine($"- Nombre: {sensor.Name}, Tipo: {sensor.SensorType}, Valor: {sensor.Value}");

// Carga de la GPU
if (sensor.SensorType == SensorType.Load && sensor.Name.Contains("GPU Core"))
{
gpuLoad = sensor.Value ?? 0.0f;
}

// VRAM usada
if (sensor.SensorType == SensorType.SmallData && sensor.Name.Contains("GPU Memory Used"))
{
gpuVramUsed = sensor.Value ?? 0.0f;
}

// VRAM total
if (sensor.SensorType == SensorType.SmallData && sensor.Name.Contains("GPU Memory Total"))
{
gpuVramTotal = sensor.Value ?? 0.0f;
}

// Reloj de la GPU
if (sensor.SensorType == SensorType.Clock && sensor.Name.Contains("GPU Core"))
{
gpuClock = sensor.Value ?? 0.0f;
}

// Potencia de la GPU
if (sensor.SensorType == SensorType.Power && sensor.Name.Contains("GPU Package"))
{
gpuPower = sensor.Value ?? 0.0f;
}

// Temperatura de la GPU
if (sensor.SensorType == SensorType.Temperature && sensor.Name.Contains("GPU Core"))
{
gpuTemp = sensor.Value ?? 0.0f;
}
}

// Imprime los valores extraídos
Console.WriteLine("\nValores extraídos:");
Console.WriteLine($"- Carga de la GPU: {gpuLoad}%");
Console.WriteLine($"- VRAM Usada: {gpuVramUsed} MB");
Console.WriteLine($"- VRAM Total: {gpuVramTotal} MB");
Console.WriteLine($"- Reloj de la GPU: {gpuClock} MHz");
Console.WriteLine($"- Potencia de la GPU: {gpuPower} W");
Console.WriteLine($"- Temperatura de la GPU: {gpuTemp} °C");
}
}

computer.Close();
Console.WriteLine("\nProceso completado.");

}
}
}
< /code>
Консоль: < /p>

nombre: пакет GPU, Tipo: Power, Valor: 39,817 < /li>
Potencia de la GPU: 39,817 w < /li>
< /ul>
Сервисный код -> < /p>
static (float temperature, float tdp, float gpuLoad, float gpuVramUsed, float gpuVramTotal, float gpuClock, float gpuPower, float gpuTemp) GetHardwareInfo(Computer computer)
{
float temperature = 0.0f;
float tdp = 0.0f;
float gpuLoad = 0.0f;
float gpuVramUsed = 0.0f;
float gpuVramTotal = 0.0f;
float gpuClock = 0.0f;
float gpuPower = 0.0f;
float gpuTemp = 0.0f;

foreach (IHardware hardware in computer.Hardware)
{
hardware.Update(); // Actualiza los sensores

//sensores de CPU
if (hardware.HardwareType == HardwareType.Cpu)
{
foreach (ISensor sensor in hardware.Sensors)
{
Logger.Log($"Sensor detectado CPU: {sensor.Name} ({sensor.SensorType}) - Valor: {sensor.Value}\n");
// Buscamos el sensor de temperatura de la CPU
if (sensor.SensorType == SensorType.Temperature)
{
temperature = sensor.Value ?? 0.0f;

}

// Buscamos el sensor de TDP de la CPU
if (sensor.SensorType == SensorType.Power && sensor.Name.Contains("Package"))
{
tdp = sensor.Value ?? 0.0f;
}
}
}

//sensores de GPU
if (hardware.HardwareType == HardwareType.GpuNvidia || hardware.HardwareType == HardwareType.GpuAmd)
{
foreach (ISensor sensor in hardware.Sensors)
{

Logger.Log($"Sensor detectado GPU: {sensor.Name} ({sensor.SensorType}) - Valor: {sensor.Value}\n");
// Carga de la GPU
if (sensor.SensorType == SensorType.Load && sensor.Name.Contains("GPU Core"))
{
gpuLoad = sensor.Value ?? 0.0f;
}

// VRAM usada
if (sensor.SensorType == SensorType.SmallData && sensor.Name.Contains("GPU Memory Used"))
{
gpuVramUsed = sensor.Value ?? 0.0f;
}

// VRAM total
if (sensor.SensorType == SensorType.SmallData && sensor.Name.Contains("GPU Memory Total"))
{
gpuVramTotal = sensor.Value ?? 0.0f;
}

// Reloj de la GPU
if (sensor.SensorType == SensorType.Clock && sensor.Name.Contains("GPU Core"))
{
gpuClock = sensor.Value ?? 0.0f;
}

// Potencia de la GPU
if (sensor.SensorType == SensorType.Power && sensor.Name.Equals("GPU Package"))
{
gpuPower = sensor.Value ?? 0.0f;

}

// Temperatura de la GPU
if (sensor.SensorType == SensorType.Temperature && sensor.Name.Contains("GPU Core"))
{
gpuTemp = sensor.Value ?? 0.0f;

}
}
}

}

return (temperature, tdp, gpuLoad, gpuVramUsed, gpuVramTotal, gpuClock, gpuPower, gpuTemp);
}
< /code>
Чтение из моего файла журнала:
2025-02-07 11:57:27-Enviando Datos: 54 | 61,6 | 20 | 1833 | 12288 | 975,00 | 0,0 | 53 < /p>
Посмотрим, знает ли кто -нибудь, почему это происходит, и может мне помочь. Большое спасибо!


Подробнее здесь: https://stackoverflow.com/questions/794 ... monitorlib
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»