Профилировщик VS2010: можно ли профилировать один конкретный метод? - PullRequest
24 голосов
/ 03 мая 2010

Возможно, есть несколько способов включить или отключить профилирование из кода?

Или вы можете выбрать конкретную функцию для профиля?

Ответы [ 3 ]

30 голосов
/ 05 мая 2010

Вы также можете использовать API сбора данных профилировщика, чтобы запускать и останавливать профилирование по интересующим методам. См. эту статью MSDN для ознакомления.

Лучший способ использовать API в этом случае - вызвать StartProfile непосредственно перед выполнением ваших методов, а затем вызвать StopProfile сразу после. Вы должны начать профилирование с помощью параметра «Начать с приостановки профилирования», чтобы вы не начинали профилирование, пока не нажмете первый вызов StartProfile.

Использование API сбора данных будет работать с отбором проб или измерительными приборами.

16 голосов
/ 05 мая 2010

Да, с небольшими усилиями, вы можете сделать это, если вы выполняете профилирование (не сэмплирование):

  1. Добавьте бинарный файл / проект в качестве цели в Performance Explorer
  2. Щелкните правой кнопкой мыши на цели, выберите Свойства
  3. Перейдите в раздел «Инструментарий», снимите флажок «Исключить мелкие функции ...»
  4. Перейдите в раздел «Дополнительно» в разделе «Дополнительные параметры измерительной аппаратуры», укажите методы, которые вы конкретно хотите профилировать (например, /include:ConsoleApp.Program::Main,MyNamespace.MyClass::MyFunc)

Синтаксис /include немного странен, но если вы запустите командную строку VS и перейдете в каталог вашего двоичного файла, вы можете запустить vsinstr.exe /dumpfuncs foo.exe, чтобы увидеть список методов, которые вы можете явно включить.

Дополнительную информацию смотрите в синтаксисе командной строки vsinstr.exe .

0 голосов
/ 03 мая 2010

Не.

Вы ищете "узкое место", верно?

Это, вероятно, не в той функции, где вы думаете.

Это метод, на который я полагаюсь, для любого языка или операционной системы.

Если проблема в этой функции, она сообщит вам. Если это где-то еще, он скажет вам.


@ downvoter: В чем проблема? Если вас беспокоит скорость запуска приложения, то во время запуска приложения берите образцы вручную.

Альтернатива в профилировщике - запускать его все время, а затем попытаться выяснить, какой частью временной шкалы был запуск. А поскольку большую часть времени тратится на ожидание пользователя, когда вам не нужны сэмплы, вы переводите его в режим сэмплирования ЦП. Проблема в том, что вы не видите таких вещей, как время ввода-вывода, затрачиваемое на загрузку dll, запросы DNS и т. Д., Которые могут быть доминирующими при запуске.

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

На случай, если вы спросите: «Как я могу проверить тысячи образцов стеков?» ответ вам не нужно . Если стартап заметно медленный, то это потому, что он тратит большую часть своего времени на то, что ему не нужно делать - на какую-то долю, например, 30%, чтобы быть консервативной. Это означает, что вы будете видеть его в среднем один раз каждые 3,33 образца. Поскольку вам нужно увидеть его два или более раз, чтобы понять, что это проблема, в среднем вам нужно 6,67 образцов. Чем больше проблема, тем меньше образцов вам нужно. (Если это 90%, вам нужно только 2 / 0,9 = 2,2 образца.) Если вы исследуете 20 образцов, вы увидите, что любая проблема стоит больше, чем около 10%, и если вы ее исправите, любые меньшие проблемы займут больший процент - они усиливаются коэффициентом ускорения, поэтому их легче найти на следующем этапе -вокруг. Вот математика.

...