每隔X秒轮询一个进程,CPU使用率较低

时间:2012-02-13 20:33:49

标签: c# loops recursion polling

我基本上需要每隔5秒左右运行一次代码:

if (oneperone.HasExited)
{
    oneperone.Start();
}
foreach (Process p in System.Diagnostics.Process.GetProcessesByName("WerFault"))
{
    try
    {
        p.Kill();
        p.WaitForExit(); // possibly with a timeout
    }
    catch (Win32Exception winException)
    {
        // process was terminating or can't be terminated - deal with it
    }
    catch (InvalidOperationException invalidException)
    {
        // process has already exited - might be able to let this one go
    }
}

我尝试使用带有示例的计时器:http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx我尝试使用系统线程等待命令运行无限循环,但两者都给出了不可接受的性能,系统等待命令显然锁定了线程I需要在5秒迭代之间做其他事情

请记住,5秒的事情是任意的,它可以更长或更短我只需要不断重复这段代码,但有效地希望有人有一个优雅的解决方案?

1 个答案:

答案 0 :(得分:1)

可能有更好的方法来实现您的需求,但这里建议您想要的东西:

只要您不在每次迭代中执行长期昂贵的操作,Thread.Sleep将为您提供较低的CPU使用率。

使用Sleep调用创建新线程并将进程排队以在某个队列中终止(以避免在此线程上进行长时间操作并复制“kill requests”);从单独的线程/ worker上的队列中杀死进程。避免多次尝试杀死同一个进程。