using System.Diagnostics;
using System.Threading;
using System;
public class ClientTelemetry
{
private readonly Process _proc;
public ClientTelemetry()
{
_proc = Process.GetCurrentProcess();
}
/// Working-set memory in bytes.
public long MemoryBytes => _proc.WorkingSet64;
/// Total open handles.
public int HandleCount => _proc.HandleCount;
/// CPU utilisation (%) averaged over .
public float GetCpuUsage(int sampleMs = 500)
{
// you can keep your PerformanceCounter variant, but here’s a simpler PID-based way:
var startCpu = _proc.TotalProcessorTime;
var start = DateTime.UtcNow;
Thread.Sleep(sampleMs);
var endCpu = _proc.TotalProcessorTime;
var end = DateTime.UtcNow;
// CPU‐time used across all cores:
var cpuMs = (endCpu - startCpu).TotalMilliseconds;
var elapsedMs = (end - start).TotalMilliseconds * Environment.ProcessorCount;
return (float)(cpuMs / elapsedMs * 100.0);
}
}