Enhance monitoring features and UI:
- Add detailed CPU core monitoring option for better performance control - Update monitoring settings in app configuration - Improve parallel task execution for resource usage monitoring - Modify Telegram notification service to skip alerts from svchost processes - Add "Memory %" column to process table in HTML and update related JavaScript - Create performance test scripts for API response time evaluation
This commit is contained in:
@@ -96,32 +96,26 @@ namespace ResourceMonitorService.Services
|
||||
{
|
||||
var timestamp = DateTime.Now;
|
||||
|
||||
var tasks = new List<Task>
|
||||
{
|
||||
Task.Run(async () => await GetCpuUsageAsync()),
|
||||
Task.Run(async () => await GetMemoryUsageAsync())
|
||||
};
|
||||
// Execute all monitoring tasks in parallel and capture results
|
||||
var cpuTask = GetCpuUsageAsync();
|
||||
var memoryTask = GetMemoryUsageAsync();
|
||||
var gpuTask = _settings.EnableGpuMonitoring ? GetGpuUsageAsync() : Task.FromResult(new GpuUsage());
|
||||
var diskTask = _settings.EnableDiskMonitoring ? GetDiskUsageAsync() : Task.FromResult(new List<DiskUsage>());
|
||||
var processTask = _settings.EnableProcessMonitoring ? GetTopProcessesAsync(_settings.MaxProcessesToTrack) : Task.FromResult(new List<ProcessInfo>());
|
||||
var temperatureTask = _settings.EnableTemperatureMonitoring ? GetTemperatureInfoAsync() : Task.FromResult(new TemperatureInfo());
|
||||
|
||||
if (_settings.EnableGpuMonitoring)
|
||||
tasks.Add(Task.Run(async () => await GetGpuUsageAsync()));
|
||||
|
||||
if (_settings.EnableDiskMonitoring)
|
||||
tasks.Add(Task.Run(async () => await GetDiskUsageAsync()));
|
||||
|
||||
if (_settings.EnableProcessMonitoring)
|
||||
tasks.Add(Task.Run(async () => await GetTopProcessesAsync(_settings.MaxProcessesToTrack)));
|
||||
|
||||
await Task.WhenAll(tasks);
|
||||
// Wait for all tasks to complete
|
||||
await Task.WhenAll(cpuTask, memoryTask, gpuTask, diskTask, processTask, temperatureTask);
|
||||
|
||||
return new ResourceUsage
|
||||
{
|
||||
Timestamp = timestamp,
|
||||
CPU = await GetCpuUsageAsync(),
|
||||
Memory = await GetMemoryUsageAsync(),
|
||||
GPU = _settings.EnableGpuMonitoring ? await GetGpuUsageAsync() : new GpuUsage(),
|
||||
Disks = _settings.EnableDiskMonitoring ? await GetDiskUsageAsync() : new List<DiskUsage>(),
|
||||
TopProcesses = _settings.EnableProcessMonitoring ? await GetTopProcessesAsync(_settings.MaxProcessesToTrack) : new List<ProcessInfo>(),
|
||||
Temperature = _settings.EnableTemperatureMonitoring ? await GetTemperatureInfoAsync() : new TemperatureInfo()
|
||||
CPU = await cpuTask,
|
||||
Memory = await memoryTask,
|
||||
GPU = await gpuTask,
|
||||
Disks = await diskTask,
|
||||
TopProcesses = await processTask,
|
||||
Temperature = await temperatureTask
|
||||
};
|
||||
}
|
||||
|
||||
@@ -136,20 +130,23 @@ namespace ResourceMonitorService.Services
|
||||
#pragma warning disable CA1416 // Validate platform compatibility
|
||||
var usage = _counters.TryGetValue("cpu", out var cpuCounter) ? cpuCounter.NextValue() : 0f;
|
||||
|
||||
// Get per-core usage
|
||||
// Get per-core usage (only if enabled for performance)
|
||||
var coreUsages = new List<float>();
|
||||
for (int i = 0; i < Environment.ProcessorCount; i++)
|
||||
if (_settings.EnableDetailedCpuCoreMonitoring)
|
||||
{
|
||||
try
|
||||
for (int i = 0; i < Environment.ProcessorCount; i++)
|
||||
{
|
||||
using var coreCounter = new PerformanceCounter("Processor", "% Processor Time", i.ToString());
|
||||
coreCounter.NextValue();
|
||||
Thread.Sleep(100); // Small delay for accurate reading
|
||||
coreUsages.Add(coreCounter.NextValue());
|
||||
}
|
||||
catch
|
||||
{
|
||||
coreUsages.Add(0f);
|
||||
try
|
||||
{
|
||||
using var coreCounter = new PerformanceCounter("Processor", "% Processor Time", i.ToString());
|
||||
coreCounter.NextValue();
|
||||
Thread.Sleep(50); // Reduced delay for faster reading while maintaining accuracy
|
||||
coreUsages.Add(coreCounter.NextValue());
|
||||
}
|
||||
catch
|
||||
{
|
||||
coreUsages.Add(0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user