контроль загрузки процессора - PullRequest
4 голосов
/ 04 ноября 2008

как рекомендуется контролировать загрузку процессора во время работы?

опросить загрузку процессора и вставить спит?

Ответы [ 2 ]

4 голосов
/ 04 ноября 2008

Я бы порекомендовал функциональность ОС. Для этого в Windows есть счетчики производительности и функции WinAPI.

Вот пример использования счетчиков производительности из BCL Team Blog :

foreach (Process proc in Process.GetProcesses()) {
    using (PerformanceCounter pcProcess = new PerformanceCounter("Process", "% Processor Time", proc.ProcessName)) {
        pcProcess.NextValue();
        System.Threading.Thread.Sleep(1000);
        Console.WriteLine("Process:{0} CPU% {1}", proc.ProcessName, pcProcess.NextValue());   
    }
}

Этот код делает то же самое с WMI из CodeProject :

public string GetCPU()
{
    decimal PercentProcessorTime=0;
    mObject_CPU.Get();

    ulong  u_newCPU   = 
      (ulong)mObject_CPU.Properties["PercentProcessorTime"].Value;
    ulong u_newNano   = 
      (ulong)mObject_CPU.Properties["TimeStamp_Sys100NS"].Value;
    decimal d_newCPU  = Convert.ToDecimal(u_newCPU);
    decimal d_newNano = Convert.ToDecimal(u_newNano);
    decimal d_oldCPU  = Convert.ToDecimal(u_oldCPU);
    decimal d_oldNano = Convert.ToDecimal(u_oldNano);

    // Thanks to MSDN for giving me this formula !

    PercentProcessorTime = 
      (1 - ((d_newCPU-d_oldCPU)/(d_newNano - d_oldNano)))*100m;

    // Save the values for the next run

    u_oldCPU          = u_newCPU;
    u_oldNano         = u_newNano;

    return PercentProcessorTime.ToString("N",nfi);;
}

Таким образом, вы можете запросить этих поставщиков ОС (или других для вашей ОС) и перевести ваш поток в спящий режим, если загрузка процессора высока.

0 голосов
/ 04 ноября 2008

Самый простой способ - изменить основной цикл, чтобы он либо ожидал ввода - классическая модель, управляемая событиями, - либо периодически спал в течение короткого периода времени.

Если перевести приложение в спящий режим, я бы использовал очень короткий тайм-аут, где-то в диапазоне 10-100 мсек, поскольку больше, и некоторый пользовательский ввод будет задерживаться, и любой другой будет включать в себя гораздо больше накладных расходов на уровне ОС при переключении вашего приложения. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...