Как правило, в большинстве случаев это будут более простые функции, а не функции, вызываемые чаще всего миллиард раз в цикле.
Когда вы выполняете профилирование на основе выборок (с помощью инструмента или вручную), часто самые большие горячие точки будут в крошечных листовых вызовах, которые делают простые вещи, например, функцию для сравнения двух целых чисел.
Эта функция часто не выиграет от значительной оптимизации, если она вообще будет. По крайней мере, эти гранулированные горячие точки редко бывают приоритетными. Это функция, вызывающая эту конечную функцию, которая может быть источником проблем, или функция, вызывающая функцию, вызывающую функцию, например алгоритм неоптимальной сортировки. С хорошими инструментами вы можете переходить от вызываемого абонента к вызывающему, а также видеть, кто тратит больше всего времени на вызов вызываемого.
Часто ошибочно зацикливаться на вызываемых и не смотреть на вызывающих абонентов в графе вызовов в сеансе профилирования, если вы не делаете что-то очень неэффективно на микроуровне. В противном случае вы могли бы чрезмерно потеть мелочи и потерять из виду большую картину. Наличие профилировщика в руке не защитит вас от одержимости банальными вещами. Это просто первый шаг в правильном направлении.
Кроме того, вы должны убедиться, что вы профилируете операции, которые соответствуют тем, что пользователи на самом деле хотят делать, иначе быть полностью дисциплинированными и научными в ваших измерениях и тестах не имеет смысла, поскольку это не соответствует тому, что клиенты делают с продуктом. Однажды у меня был коллега, который, черт возьми, отключил алгоритм деления куба на миллиард граней, и он гордился этим .... за исключением того, что пользователи не делят простые 6-полигональные кубы на миллиард фасеты. Все это замедлилось до ползунка, когда он попытался запустить модель производственного автомобиля с более чем 100 000 полигонов для разделения, и в этот момент он даже не смог выполнить 2 или 3 уровня разделения без замедления до сканирования. Проще говоря, он написал код, который был супер оптимизирован для нереально малых входных размеров, которые не
Вы должны оптимизировать реальные варианты использования в соответствии с интересами ваших пользователей, иначе это будет хуже, чем ничего не стоящее, поскольку все эти оптимизации, которые, по крайней мере, в некоторой степени ухудшают удобство сопровождения кода, имеют небольшую выгоду для пользователя и только все эти недостатки для кодовой базы.