Я пытаюсь измерить уровень использования ЦП во время длительного процесса. Я подозреваю, что каждый раз, когда я запускаю диспетчер задач для просмотра данных, загрузка ЦП процесса снижается, потому что диспетчер задач имеет более высокий приоритет. Если я даю своему процессу приоритет RealTime, то диспетчер задач полностью блокируется, и я не могу его использовать. Я хочу, чтобы большая часть циклов моего процессора была посвящена этому процессу, и я хочу получить приблизительное представление о том, сколько он использует. Мне не нужен посекундный монитор, а достаточно нескольких моментальных снимков, которые дадут мне знать, что происходит. Как я могу это сделать?
Измерить/измерить загрузку ЦП без TaskMgr?
Ответы (5)
Программно с API C вы можете использовать API счетчика производительности. (Использование ЦП - это просто еще один счетчик). Вы можете использовать низкоуровневый API-интерфейс реестра счетчик производительности для данных. Или вы можете использовать API PDH. (Performance Data Helper API) - это, вероятно, то, что вы хотите. Я использовал оба в прошлом, и API PDH прост в использовании.
Еще одним инструментом, который поможет вам перечислить имена доступных счетчиков, является perfmon. (Просто запустите c:\windows\system32\perfmon.exe). Это также полезная альтернатива диспетчеру задач. Он также ведет журналы и графики. И вы можете настроить счетчики для каждого логического процессора на многопроцессорной машине.
Вероятно, procdump, но один из инструментов обработки sysinternals должен помочь
Я не уверен, что ваше беспокойство по поводу диспетчера задач обоснованно. Диспетчер задач достаточно легкий, поэтому он не заглушит ваш длительный процесс и не заберет достаточное количество циклов ЦП, чтобы иметь значение. Если ваш процесс действительно так требователен к процессору, вы увидите это в диспетчере задач. Если вы не видите такой загрузки ЦП, как вы ожидаете, для вашего процесса, возможно, ваши предположения о том, что ваш процесс занимает некоторое время, потому что он использует много ЦП, неверны. Возможно, ваш длительный процесс работает долго, потому что его ввод-вывод связан или ожидает событий или много спит. то есть делать что-то ДРУГОЕ, чем использовать ЦП. Если он использует много ЦП, но не на 100%, как вы хотите, возможно, он не так эффективен, как может быть, по тем же причинам, которые я перечислил выше.
вы можете написать простой инструмент, который запрашивает этот конкретный процесс (например, по идентификатору) через Получить время
что-то в строках:
main()
HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, id);
for(;;) {
GetProcessTimes(h, /*..times.. */);
printf("time taken %d\n", (kerneltime+usertime));
Sleep(1000);
}
@martin Becket: procmon позволяет увидеть подробную информацию об использовании процессора в свойствах конкретного процесса.