Lo que se quiere conseguir su uso de la CPU instantánea (tipo de) ...
En realidad, el uso de CPU instantáneo para un proceso no existe. En lugar de ello hay que hacer dos mediciones y calcular el promedio de uso de la CPU, la fórmula es bastante simple:
AvgCpuUsed = [TotalCPUTime (proceso, tiempo2) - TotalCPUTime (proceso, tiempo1)]/[tiempo2-tiempo1]
Cuanto menor es la diferencia de Time2 y Time1, más "instantánea" será su medición. El Administrador de tareas de Windows calcula el uso de la CPU con un intervalo de un segundo. He descubierto que es más que suficiente y que incluso podría considerar hacerlo en intervalos de 5 segundos porque el acto de medir en sí mismo requiere ciclos de CPU ...
Así, en primer lugar, para obtener el promedio de tiempo de CPU
using System.Diagnostics;
float GetAverageCPULoad(int procID, DateTme from, DateTime, to)
{
// For the current process
//Process proc = Process.GetCurrentProcess();
// Or for any other process given its id
Process proc = Process.GetProcessById(procID);
System.TimeSpan lifeInterval = (to - from);
// Get the CPU use
float CPULoad = (proc.TotalProcessorTime.TotalMilliseconds/lifeInterval.TotalMilliseconds) * 100;
// You need to take the number of present cores into account
return CPULoad/System.Environment.ProcessorCount;
}
ahora, para la carga de la CPU "instantánea" se necesita de una clase especializada:
class ProcLoad
{
// Last time you checked for a process
public Dictionary<int, DateTime> lastCheckedDict = new Dictionary<int, DateTime>();
public float GetCPULoad(int procID)
{
if (lastCheckedDict.ContainsKey(procID))
{
DateTime last = lastCheckedDict[procID];
lastCheckedDict[procID] = DateTime.Now;
return GetAverageCPULoad(procID, last, lastCheckedDict[procID]);
}
else
{
lastCheckedDict.Add(procID, DateTime.Now);
return 0;
}
}
}
usted debe llamar a esa clase desde un temporizador (o el método de intervalo que desee) para cada proceso que desee controlar, si desea todos los procesos, simplemente utilice el Process.GetProcesses método estático
¿Es esta una pregunta acerca de cómo utilizar el paquete samurize? ¿Quizás podría reformular como una pregunta de programación? –