Загрузка CPU / IO драйверов измерительных устройств, вызванная моей программой - PullRequest
1 голос
/ 06 января 2011

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

В последнее время я оптимизировал код WIN32 / VC ++, что сделало систему почти не отвечающей. Использование ЦП, однако, было очень низким. Причиной послужили тысячи созданий и разрушений объектов GDI (ручки, кисти и т. Д.). Как только я реорганизовал код для создания всех объектов только один раз - система снова стала отзывчивой.

Это подводит меня к вопросу: есть ли способ измерить использование CPU / IO драйверов устройств (GPU / диск / и т. Д.) Для данной программы / функции / строки кода?

Ответы [ 3 ]

3 голосов
/ 07 января 2011

Вы можете использовать различные инструменты из SysInternals Utilities (сейчас это продукт Microsoft, см. http://technet.microsoft.com/en-us/sysinternals/bb545027), чтобы дать основную идею перед тем, как приступить к работе. В вашем случае проводник процессов (procxp) и монитор процессов (procmon) выполняют достойную работу.Они могут быть использованы для того, чтобы дать вам базовое представление о том, какой тип медлительности перед выполнением детализации профилирования.

Затем вы можете использовать xperf http://msdn.microsoft.com/en-us/performance/default для детализации. При правильной настройкеэтот инструмент может привести вас к точной функции, которая вызывает медлительность, без внедрения кода профилирования в вашу существующую программу. Уже есть видео с PDC, рассказывающее о том, как его использовать http://www.microsoftpdc.com/2009/CL16, и я настоятельно рекомендую этот инструмент. По собственному опыту,всегда лучше наблюдать сначала при использовании procxp / procmon, а затем нацеливать подозреваемых с помощью xperf, потому что xperf может генерировать огромную загрузку информации, если не отфильтрован с умом.

В некоторых трудных случаях, связанных с блокировками, ОтладкаИнструменты для Windows (windbg) будут очень удобныи есть специальные книги, рассказывающие о его использовании.В этих книгах обычно говорится об обнаружении зависания, и здесь можно использовать несколько методов для определения медлительности.(например, беглец)

2 голосов
/ 07 января 2011

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

0 голосов
/ 07 января 2011

Чтобы определить использование программы ЦП / памятью / диском в режиме реального времени, вы можете использовать программы мониторинга ресурсов и диспетчера задач, которые поставляются с Windows.Вы можете узнать количество времени, которое блок кода занимает относительно других блоков кода, распечатав systime.Помните, что не следует выполнять слишком много одновременного мониторинга, поскольку это может сбить ваши вычисления.

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

...