gpt4 book ai didi

c# - 获取线程 Cpu 使用率

转载 作者:行者123 更新时间:2023-12-03 08:07:31 26 4
gpt4 key购买 nike

我有一组 cpu 消耗执行,每个执行都在低优先级的线程中运行。这些线程将在一个进程(如 IIS)中运行,该进程具有许多我不想减慢它们速度的其他线程。我想计算所有其他线程的 cpu 使用率,如果它大于 50%,那么我暂停我的一个线程,如果它小于 50%,我恢复暂停的执行。

在暂停时,我将执行状态保存在数据库中并终止其线程,在恢复时,我启动新线程。

我需要的是一个返回线程 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));

最佳答案

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

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

我找到了 the example解释了这种方法。您可以阅读它作为引用。

关于c# - 获取线程 Cpu 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24201021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com