by Guest » 07 Feb 2025, 13:49
Ich arbeite mit einem C# -Dienst, der die Bibliothek LibRehardwaremonitorlib verwendet, um Hardware -Metriken, einschließlich GPU -Stromverbrauchsdaten, zu sammeln. Ich habe jedoch auf ein Problem mit dem Power -Sensor gestoßen, der dem GPU -Paket entspricht, das immer einen Wert von 0,0 im Dienst zurückgibt, obwohl derselbe Code in einer Konsolenanwendung gut funktioniert. < /P>
In der Konsolenanwendung wird der Leistungssensor mit dem Namen GPU -Paket erkannt und gibt den richtigen Leistungswert zurück. Obwohl der Sensor vorhanden ist (gemäß den Protokollen), gibt er jedoch nicht die IF -Bedingung ein, die für diesen Sensor überprüft und nie einen anderen Wert als 0,0 abruft. < /P>
Der verwendete Code ist in beiden Anwendungen (Konsole und Dienst) gleich, und alle anderen Sensoren funktionieren korrekt, wodurch dieses Verhalten unerklärlich macht. Insbesondere funktioniert der GPU -Leistungssensor nicht wie im Dienst erwartet, während er in der Konsolenanwendung einwandfrei funktioniert, wo er die richtigen Werte abruft. Ausgabe: < /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>
Konsole: < /p>
Nombre: GPU -Paket, Tipo: Power, Valor: 39,817 < /li>
potencia de la gpu: 39,817 w < /li>
< /ul>
Servicecode -> < /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>
Lesen aus meiner Protokolldatei:
2025-02-07 11:57:27-Enviando-Daten: 54 | 61,6 | 20 | 1833 | 12288 | 975,00 | 0,0 | 53 < /p>
Mal sehen, ob jemand weiß, warum dies geschieht und mir helfen kann. Vielen Dank!
Ich arbeite mit einem C# -Dienst, der die Bibliothek LibRehardwaremonitorlib verwendet, um Hardware -Metriken, einschließlich GPU -Stromverbrauchsdaten, zu sammeln. Ich habe jedoch auf ein Problem mit dem Power -Sensor gestoßen, der dem GPU -Paket entspricht, das immer einen Wert von 0,0 im Dienst zurückgibt, obwohl derselbe Code in einer Konsolenanwendung gut funktioniert. < /P>
In der Konsolenanwendung wird der Leistungssensor mit dem Namen GPU -Paket erkannt und gibt den richtigen Leistungswert zurück. Obwohl der Sensor vorhanden ist (gemäß den Protokollen), gibt er jedoch nicht die IF -Bedingung ein, die für diesen Sensor überprüft und nie einen anderen Wert als 0,0 abruft. < /P>
Der verwendete Code ist in beiden Anwendungen (Konsole und Dienst) gleich, und alle anderen Sensoren funktionieren korrekt, wodurch dieses Verhalten unerklärlich macht. Insbesondere funktioniert der GPU -Leistungssensor nicht wie im Dienst erwartet, während er in der Konsolenanwendung einwandfrei funktioniert, wo er die richtigen Werte abruft. Ausgabe: < /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>
Konsole: < /p>
Nombre: GPU -Paket, Tipo: Power, Valor: 39,817 < /li>
potencia de la gpu: 39,817 w < /li>
< /ul>
Servicecode -> < /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>
Lesen aus meiner Protokolldatei:
2025-02-07 11:57:27-Enviando-Daten: 54 | 61,6 | 20 | 1833 | 12288 | 975,00 | 0,0 | 53 < /p>
Mal sehen, ob jemand weiß, warum dies geschieht und mir helfen kann. Vielen Dank!