Опрос процесса каждые X секунд с низкой загрузкой процессора - PullRequest
1 голос
/ 14 февраля 2012

Мне в основном нужно запускать этот код каждые 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, и я попытался запуститьбесконечный цикл с командами ожидания системного потока, но обе они дают недопустимую производительность, а команда системного ожидания, очевидно, блокирует поток, который мне нужно сделать в промежутке между 5-секундной итерацией

имейте в виду, что 5-секундная вещь произвольнаможет быть длиннее или короче, мне просто нужно продолжать повторять этот код, но надеюсь, у кого-нибудь есть изящное решение?

1 Ответ

1 голос
/ 14 февраля 2012

Вероятно, есть лучший способ достичь того, что вам нужно, но вот предложение для того, что вы хотите:

Thread.Sleep обеспечит низкую загрузку ЦП, если вы не выполняете длительные и дорогостоящие операции.на каждой итерации.

Создать новый поток с вызовами Sleep и поставить в очередь процессы для уничтожения в какой-либо очереди (чтобы избежать длительных операций в этом потоке и дублирования «запросов на уничтожение»);убить процессы из очереди в отдельном потоке / работнике.Старайтесь не пытаться убить один и тот же процесс более одного раза.

...