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

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

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

24
задан John Saunders 27 March 2015 в 18:58
поделиться

3 ответа

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

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

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

30
ответ дан 28 November 2019 в 23:23
поделиться

Не надо.

Вы ищете «узкое место», не так ли?

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

Я полагаюсь на этот метод для любого языка или ОС.

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


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

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

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

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

0
ответ дан 28 November 2019 в 23:23
поделиться

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

  1. Добавьте ваш бинарник/проект как цель в Performance Explorer
  2. Щелкните правой кнопкой мыши на цели, выберите Properties
  3. Перейдите в раздел Instrumentation, снимите галочку с "Exclude small functions... "
  4. Перейдите в раздел Advanced, в разделе "Additional instrumentation options" укажите методы, которые вы хотите профилировать (например, /include:ConsoleApp.Program::Main,MyNamespace. MyClass::MyFunc)

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

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

16
ответ дан 28 November 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: