获取线程CPU使用率

时间:2014-06-13 08:35:46

标签: c# multithreading cpu-usage

我有一组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));

1 个答案:

答案 0 :(得分:4)

要计算进程/线程CPU使用率,您应该获得系统/进程/线程的特定时间范围的处理器时间。然后您可以计算CPU使用率,不要忘记将值除以CPU核心数。

ProcessWideThreadCpuUsage = (ThreadTimeDelta / CpuTimeDelta)
SystemWideThreadCpuUsage = (ThreadTimeDate / CpuTimeDelta) * ProcessCpuUsage

我发现the example解释了这种方法。您可以将其作为参考阅读。