Подтвердить что ты не робот

Профилировщик VS2010: можно ли профилировать один конкретный метод?

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

  • Добавьте свой бинарный/проект в качестве целевого объекта в проводнике производительности
  • Щелкните правой кнопкой мыши цель, нажмите "Свойства"
  • Перейдите в раздел Instrumentation, снимите флажок "Исключить небольшие функции..."
  • Перейдите в раздел "Дополнительно" в разделе "Дополнительные параметры инструментария", укажите методы, которые вы специально хотите профилировать (например, /include:ConsoleApp.Program::Main,MyNamespace.MyClass::MyFunc)

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

Подробнее см. синтаксис командной строки vsinstr.exe.

Ответ 3

Не.

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

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

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

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


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

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

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

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