gprof ( вот бумага ) надежна, но она предназначена только для измерения изменений , и даже для этого она измеряет только CPU связанные вопросы. Он никогда не рекламировался как полезный для поиска проблем . Это идея, которую другие люди наслаивали на нее.
Рассмотрим этот метод .
Еще один хороший вариант, если вы не возражаете потратить немного денег, это Увеличение .
Добавлено: Если я могу просто привести вам пример. Предположим, у вас есть иерархия вызовов, в которой Main вызывает A некоторое количество раз, A вызывает B некоторое количество раз, B вызывает C некоторое количество раз, и C ожидает некоторый ввод-вывод с сокетом или файлом, и это в основном все программа делает. Теперь предположим, что число раз, когда каждая подпрограмма вызывает следующую, на 25% больше, чем это необходимо. Поскольку 1.25 ^ 3 составляет около 2, это означает, что запуск всей программы занимает вдвое больше времени, чем необходимо.
Во-первых, поскольку все время тратится на ожидание ввода-вывода, gprof ничего не скажет вам о том, как это время тратится, потому что он смотрит только на «рабочее» время.
Во-вторых, предположим (только для аргумента), что сделал подсчет времени ввода-вывода. Это может дать вам график вызовов, в основном говоря, что каждая подпрограмма занимает 100% времени. О чем тебе это говорит? Ничего больше, чем вы уже знаете.
Однако, если вы возьмете небольшое количество образцов стека, вы увидите на каждой из них строки кода, где каждая подпрограмма вызывает следующую.
Другими словами, это не просто приблизительная оценка времени в процентах, это , указывающая вам на конкретные строки кода, которые стоят дорого .
Вы можете посмотреть на каждую строку кода и спросить, есть ли способ сделать это меньше раз. Если вы сделаете это, вы получите ускорение в 2 раза.
Люди получают большие факторы таким образом. По моему опыту, количество уровней вызовов может легко быть 30 или более. Каждый вызов кажется необходимым, пока вы не спросите, можно ли его избежать. Даже небольшое количество вызовов, которых можно избежать, может иметь огромное влияние на такое количество слоев.