Add GPU detection and usage retrieval with error handling
This commit is contained in:
@@ -190,26 +190,83 @@ namespace ResourceMonitorService
|
||||
|
||||
private object GetGpuUsage()
|
||||
{
|
||||
NvmlWrapper.NvmlInit();
|
||||
IntPtr device;
|
||||
NvmlWrapper.NvmlDeviceGetHandleByIndex(0, out device);
|
||||
NvmlWrapper.NvmlUtilization utilization;
|
||||
NvmlWrapper.NvmlDeviceGetUtilizationRates(device, out utilization);
|
||||
|
||||
uint temperature;
|
||||
NvmlWrapper.NvmlDeviceGetTemperature(device, 0, out temperature);
|
||||
|
||||
uint fanSpeed;
|
||||
NvmlWrapper.NvmlDeviceGetFanSpeed(device, out fanSpeed);
|
||||
|
||||
NvmlWrapper.NvmlShutdown();
|
||||
|
||||
return new
|
||||
if (!IsNvidiaGpuPresent())
|
||||
{
|
||||
Usage = utilization.Gpu,
|
||||
Temperature = temperature,
|
||||
FanSpeed = fanSpeed
|
||||
};
|
||||
return new
|
||||
{
|
||||
Usage = 0,
|
||||
Temperature = 0,
|
||||
FanSpeed = 0,
|
||||
IsAvailable = false,
|
||||
Message = "No NVIDIA GPU detected"
|
||||
};
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
NvmlWrapper.NvmlInit();
|
||||
IntPtr device;
|
||||
NvmlWrapper.NvmlDeviceGetHandleByIndex(0, out device);
|
||||
NvmlWrapper.NvmlUtilization utilization;
|
||||
NvmlWrapper.NvmlDeviceGetUtilizationRates(device, out utilization);
|
||||
|
||||
uint temperature;
|
||||
NvmlWrapper.NvmlDeviceGetTemperature(device, 0, out temperature);
|
||||
|
||||
uint fanSpeed;
|
||||
NvmlWrapper.NvmlDeviceGetFanSpeed(device, out fanSpeed);
|
||||
|
||||
NvmlWrapper.NvmlShutdown();
|
||||
|
||||
return new
|
||||
{
|
||||
Usage = utilization.Gpu,
|
||||
Temperature = temperature,
|
||||
FanSpeed = fanSpeed
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new
|
||||
{
|
||||
Usage = 0,
|
||||
Temperature = 0,
|
||||
FanSpeed = 0,
|
||||
IsAvailable = false,
|
||||
Error = ex.Message
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsNvidiaGpuPresent()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Method 1: Try to initialize NVML
|
||||
NvmlWrapper.NvmlInit();
|
||||
uint deviceCount = 0;
|
||||
NvmlWrapper.NvmlDeviceGetCount(ref deviceCount);
|
||||
NvmlWrapper.NvmlShutdown();
|
||||
|
||||
return deviceCount > 0;
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Method 2: Fallback to checking using WMI
|
||||
try
|
||||
{
|
||||
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController WHERE Name LIKE '%NVIDIA%'"))
|
||||
{
|
||||
var collection = searcher.Get();
|
||||
return collection.Count > 0;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private object GetCurrentlyRunningGame()
|
||||
|
||||
Reference in New Issue
Block a user