С другой стороны, никто не делает такие замечательные приложения, как Microsoft. Visual Studio - отличный продукт, и его профилировщик разделяет эти атрибуты.
С другой стороны, есть предостережения (также для других профилировщиков).
В режиме выборки не выполняется выборка, когда поток заблокирован. Поэтому он не учитывает посторонних операций ввода-вывода, вызовов сокетов и т. Д. Это атрибут, который датируется ранними днями prof и gprof , которые начинались как сэмплеры ПК, и поскольку при блокировке ПК бессмысленно, выборка была отключена. ПК может быть бессмысленным, , но стек точно сообщает, почему поток заблокирован , и, когда на это уходит много времени, вы должны это знать.
В инструментальном режиме он может включать в себя ввод / вывод, но он дает вам только процент уровня функции, а не уровень линии. Это может быть хорошо, если функции оказываются небольшими или если они вызывают друг друга только в небольшом количестве мест, поэтому поиск сайтов вызовов не слишком сложен. Я работаю с хорошими программистами, но наш код не такой. На самом деле, часто сайты вызовов невидимы, потому что они вставляются компилятором. С другой стороны, образцы стека точно определяют эти вызовы, независимо от того, кто их написал.
Профилировщик делает хорошую работу, показывая вам разделение между действиями разных потоков. Тогда вам нужно знать, если поток приостановлен или показывает низкую активность процессора, это потому, что он блокирует что-то, в чем он на самом деле не обязан? Образцы стека могут сказать вам, что если они могут быть взяты во время блокировки. С другой стороны, если поток сильно проворачивается, знаете ли вы, действительно ли необходимо то, что он делает, или его можно уменьшить? Образцы стека также скажут вам об этом.
Многие люди думают, что основная работа профилировщика - это измерение. Лично я хочу что-то, что точно определяет код, который стоит много времени и может быть выполнен более эффективно. В большинстве случаев это сайты вызова функций, а не «горячие точки». Мне не нужно знать «много времени» с какой-либо точностью. Если я знаю, что, скажем, 60% +/- 20% меня устраивают, потому что я ищу проблему, а не измерение. Если из-за этой неточности я исправлю проблему, которая не является самой большой, это нормально, потому что, когда я повторю процесс, самая большая проблема будет еще больше, в процентах, поэтому я не буду ее пропускать.