Рассчитать общее использование процессора
Что является лучшим алгоритмом для расчета общего использования процессора в конкретный момент времени во время выполнения процесса.
Я работаю на платформе Windows в C++.
7 ответов
GetProcessTimes
для разрешения 100 наносекунд. Если вы хотите время цикла, используйте QueryProcessCycleTime
в висте и выше.
Позвольте мне порекомендовать вам эту замечательную статью: http://www.codeproject.com/KB/threads/Get_CPU_Usage.aspx
Я уверен, что вы найдете это полезным.
Intel VTune - отличный инструмент для анализа ресурсов процессора: http://www.intel.com/cd/software/products/asmo-na/eng/239144.htm
// Объявляем
PerformanceCounter cpuCounter = null;
// инициализируем где-нибудь в конструкторе..
cpuCounter = new PerformanceCounter ();
cpuCounter.CategoryName = "Процессор";
cpuCounter.CounterName = "% времени процессора";
cpuCounter.InstanceName = "_Total";
Затем, чтобы получить загрузку процессора в%, просто позвоните
cpuCounter.NextValue()
Источник: http://zamov.online.fr/EXHTML/CSharp/CSharp_927308.html
Используйте WMI, чтобы получить "PercentProcessorTime"; имейте в виду, что это, вероятно, приведет к снижению производительности.
Если вы хотите регулировать работу своего приложения, лучше использовать собственную метрику внутренней производительности, специфичную для вашего приложения, и регулировать ее на основе этого (например, частоту обновления экрана и т. Д.).
Простейшим методом получения общей загрузки ЦП за период является использование API GetSystemTimes. Это функция ядра, доступная начиная с Windows XP SP1. Возвращает количество процессорного времени, использованного с момента включения системы. Таким образом, разница между этими значениями, полученными в течение интервала, даст вам общее использование ЦП за этот интервал.
Помните, что время ядра, предоставляемое этой функцией, включает время простоя, поэтому вам нужно вычесть время простоя, возвращаемое первым параметром из нее.
Функция возвращает общее время для всех доступных ядер / процессоров, поэтому вы можете также разделить дельты на количество процессоров, полученных из GetSystemInfo.