Visual Studio 2008 Profiler - Instrumented дает странные результаты - PullRequest
4 голосов
/ 31 августа 2009

Я запускаю профилировщик Visual Studio 2008 в сборке "RelDebug" моего приложения. Оптимизация включена, но встраивание только умеренное, присутствуют кадры стека и испускаются символы. Другими словами, RelDebug - это несколько оптимизированная сборка, которую можно отлаживать (хотя применяются обычные предостережения релиза о проверке переменных).

Я запускаю как сэмплирование, так и профилированный профилировщик на отдельных прогонах.

Результат? Профилировщик выборки дает результат, который выглядит разумным. Однако, когда я смотрю на результаты профилированного профилировщика, я вижу функции, которые не должны находиться даже в верхней части списка, доходя до.

Например, функция типа «SetFont», которая состоит только из 1 строки, присваивающей высоту члену класса. Или «SetClipRect», который просто назначает прямоугольник.

Конечно, я смотрю «Эксклюзивную» статистику (то есть минус дети).

Это случилось с кем-то еще? Это всегда происходит, когда мое приложение выросло до определенного размера. Это делает инструментальный профилировщик бесполезным в этой точке.

Я понял проблему. И профилировщики Visual Studio 2008, и Visual Studio 2010 являются посредственными (мягко говоря). Я купил Intel C ++ Studio, которая поставляется с усилителем vTune (профилировщик). Используя Intel Profiler для того же кода, я смог получить результаты профилирования, которые действительно имели смысл.

Ответы [ 2 ]

2 голосов
/ 31 августа 2009

Вы говорите "конечно, вы смотрите на Эксклюзив". Посмотрите на инклюзивную статистику. Во всех программах, кроме самых простых, или в алгоритмах, почти все время отводится подпрограммам и функциям, поэтому, если у вас есть проблемы с производительностью, скорее всего, это вызовы, о которых вы не знали, что это были скачки времени.

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

1 голос
/ 01 сентября 2009

Там нет ошибки. Выборка не может сказать вам, сколько времени вы провели за звонок. Профилировщик просто подсчитывает, сколько раз таймер оказался в этой конкретной функции. Поскольку SetFont вызывается не часто, вы не получаете много обращений к этой функции, и у вас создается впечатление, что эта функция не занимает много времени.

С другой стороны, когда вы запускаете инструментарий, профилировщик считает каждый вызов и измеряет время выполнения каждой функции. Именно поэтому вы получаете точную информацию о функциях загрузки процессора.

При изучении результатов контрольно-измерительных приборов вы всегда должны учитывать количество вызовов. Поскольку SetFont является более менее API, не имеет значения, является ли он эксклюзивным или включающим. Единственное, что имеет значение, это его общее время и то, как часто оно называется.

...