Ho bisogno di ottenere la memoria RAM e l'utilizzo della CPU durante l'esecuzione di un processo (il processo può essere eseguito a volte e in 30 minuti). Sono in grado di ottenere la RAM libera ma l'utilizzo della CPU non è corretto, rispetto al valore di Task Manager. Sto facendo qualcosa di sbagliato? Qui è il mio codice:Utilizza CPU e RAM
class Program
{
static List<float> AvailableCPU = new List<float>();
static List<float> AvailableRAM = new List<float>();
protected static PerformanceCounter cpuCounter;
protected static PerformanceCounter ramCounter;
static void Main(string[] args)
{
cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
ramCounter = new PerformanceCounter("Memory", "Available MBytes");
try
{
System.Timers.Timer t = new System.Timers.Timer(1200);
t.Elapsed += new ElapsedEventHandler(TimerElapsed);
t.Start();
Thread.Sleep(10000);
}
catch (Exception e)
{
Console.WriteLine("catched exception");
}
Console.ReadLine();
}
public static void TimerElapsed(object source, ElapsedEventArgs e)
{
float cpu = cpuCounter.NextValue();
float ram = ramCounter.NextValue();
Console.WriteLine(string.Format("CPU Value: {0}, ram value: {1}", cpu, ram));
AvailableCPU.Add(cpu);
AvailableRAM.Add(ram);
}
}
Ma quando ho eseguito il programma, ecco quello che è stampato sulla console, rispetto ai valori di task manager:
Che cosa sto facendo di sbagliato?
È fluttuante sul display, forse stai confrontando diversi intervalli di tempo? Hai _o_ un valore 2.7 lì ... –
Ho aggiunto un metodo per simulare il carico della CPU ei valori non sono nemmeno vicini a quelli del task manager. Leggo i valori una volta al secondo. Sospetto che ciò possa essere dovuto alla CPU multi core, ma non ne sono ancora sicuro ... –