我有一组占用CPU较多的执行操作,每个操作都在低优先级线程中运行。这些线程将在一个进程(例如IIS)中运行,该进程有许多其他线程,我不希望它们变慢。我想计算所有其他线程的CPU使用率,如果大于50%,则暂停其中一个线程;如果小于50%,则恢复一个已暂停的操作。
暂停时,我会保存执行状态到数据库,并终止其线程;恢复时,我会启动新线程。
我需要一个函数返回线程的CPU使用率百分比。
暂停时,我会保存执行状态到数据库,并终止其线程;恢复时,我会启动新线程。
我需要一个函数返回线程的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 t = new Timer(monitorRuns,null,new TimeSpan(0,0,10),new TimeSpan(0,5,0));
ThreadPriority = Priority.Lowest;
。仅仅设置优先级就足够了吗?我不想在服务器繁忙时减慢速度。 - mrd abd