我有一组cpu消耗执行,每个执行都在低优先级的线程中运行。这些线程将在一个进程(如IIS)中运行,该进程具有许多其他线程,我不想让它们变慢。我想计算所有其他线程的CPU使用率,如果它超过50%,那么我暂停我的一个线程,如果它小于50%,我恢复暂停的执行。
暂停我在db中保存执行状态并终止其线程,并在恢复时启动新线程。
我需要的是一个返回线程的cpu使用百分比的函数。
private static void monitorRuns(object state)
{
Process p = Process.GetCurrentProcess;
double usage = 0;
foreach(ProcessThread t in p.Threads)
{
if(!myThreadIds.Contains(t.Id)) // I have saved my own Thread Ids
{
usage += getUsingPercentage(t); // I need a method like getUsingPercentage
}
}
if(usage > 50){
pauseFirst(); // saves the state of first executions and terminates its threads
}else{
resumeFirst(); // start new thread that executes running using a state
}
}
使用Timer:
调用此函数Timer t = new Timer(monitorRuns,null,new TimeSpan(0,0,10),new TimeSpan(0,5,0));
答案 0 :(得分:4)
要计算进程/线程CPU使用率,您应该获得系统/进程/线程的特定时间范围的处理器时间。然后您可以计算CPU使用率,不要忘记将值除以CPU核心数。
ProcessWideThreadCpuUsage = (ThreadTimeDelta / CpuTimeDelta)
SystemWideThreadCpuUsage = (ThreadTimeDate / CpuTimeDelta) * ProcessCpuUsage
我发现the example解释了这种方法。您可以将其作为参考阅读。