Возможно некоторые методы, чтобы включить и выключить профилирование из кода?
Или можно ли выбрать определенную функцию для профилирования?
Вы также можете использовать API сбора данных профилировщика для запуска и остановки профилирование по интересующим вас методам. См. эту статью MSDN для пошагового руководства.
Лучший способ использовать API в этом случае - это вызвать StartProfile
непосредственно перед выполнением ваших методов, а затем сразу после этого вызвать StopProfile
. Вы должны начать профилирование с помощью опции «Начать с приостановкой профилирования», чтобы вы не начали профилирование, пока не нажмете первый вызов StartProfile
.
Использование API сбора данных будет работать с выборкой или инструментарием.
Не надо.
Вы ищете «узкое место», не так ли?
Вероятно, дело не в функции, в которой вы думаете.
Я полагаюсь на этот метод для любого языка или ОС.
Если проблема в этой функции, она сообщит вам. Если это где-то еще, он скажет вам.
@downvoter: В чем проблема? Если вас беспокоит скорость запуска приложения, вручную возьмите образцы во время запуска приложения.
Альтернатива профилировщику - запускать его все время, а затем пытаться выяснить, какая часть временной шкалы была запуском. А поскольку большая часть времени тратится на ожидание пользователя, когда вам не нужны сэмплы, вы переводите его в режим выборки CPU. Проблема в том, что вы не видите таких вещей, как время ввода-вывода, затрачиваемое на загрузку DLL, запросы DNS и т. Д., Которые могут быть доминирующими во время запуска.
Тогда есть целая проблема глупости изложения, такой как «горячая тропа», где истинный любопытный может легко спрятаться .
Если вы спрашиваете: «Как я могу исследовать тысячи образцов стопки?» ответ вам не нужно . Если стартап работает заметно медленно, это потому, что он тратит значительную часть своего времени на то, что ему не нужно делать - некоторую часть, например, 30%, чтобы быть консервативным. Это означает, что вы будут видеть его в среднем каждые 3,33 образца. Поскольку вам нужно просмотреть его два или более раз, чтобы понять, что это проблема, в среднем вам потребуется 6,67 образцов. Чем больше проблема , тем меньше образцов вам нужно. (Если это 90%, вам нужно только 2 / 0,9 = 2,2 образца.) Если вы исследуете 20 образцов, вы увидите любую проблему, стоимость которой превышает примерно 10%, и если вы исправите это, любые более мелкие проблемы займут больший процент - они усилены коэффициентом ускорения, поэтому их легче найти при следующем уходе. Вот математика.
Да, с небольшими усилиями, вы можете сделать это, если вы делаете инструментальное профилирование (не выборку):
/include:ConsoleApp.Program::Main,MyNamespace. MyClass::MyFunc
)Синтаксис /include
немного странный, но если вы запустите командную строку VS и перейдете в каталог вашего бинарника, вы можете выполнить vsinstr.exe /dumpfuncs foo.exe
, чтобы увидеть список методов, которые вы можете явно включить.
Дополнительную информацию см. в vsinstr.exe синтаксис командной строки.