Généralement, ce seront des fonctions plus charnues dans la plupart des cas, pas les fonctions appelées le plus souvent un milliard de fois dans une boucle.
Lorsque vous effectuez un profilage basé sur des échantillons (avec un outil ou à la main), les plus grands hotspots vont souvent se trouver dans de minuscules appels feuillus qui font des choses simples, comme une fonction pour comparer deux entiers.
Cette fonction ne bénéficiera souvent pas d'une optimisation importante, voire inexistante. À tout le moins, ces points chauds granulaires sont rarement prioritaires. C'est la fonction appelant cette fonction feuille qui pourrait être le fauteur de troubles, ou la fonction appelant la fonction appelant la fonction, comme un algorithme de tri sous-optimal. Avec de bons outils, vous pouvez passer de l'appelé à l'appelant et voir qui passe le plus de temps à appeler l'appelé.
C'est souvent une erreur d'obséder sur les callees et de ne pas regarder les appelants sur le graphique des appels dans une session de profilage, sauf si vous faites les choses de manière très inefficace au niveau micro. Sinon, vous pourriez transpirer excessivement les petites choses et perdre de vue la grande image. Le simple fait d'avoir un profileur en main ne vous protège pas de l'obsession de choses triviales. Ce n'est qu'un premier pas dans la bonne direction.
Vous devez également vous assurer de profiler les opérations qui correspondent aux choses que les utilisateurs veulent réellement faire, sinon être totalement discipliné et scientifique dans vos mesures et vos références ne vaut rien car cela ne correspond pas à ce que les clients font avec le produit. J'ai eu un collègue une fois qui a réglé l'enfer d'un algorithme de subdivision pour subdiviser un cube en un milliard de facettes et il en était très fier .... sauf que les utilisateurs ne subdivisent pas de simples cubes à 6 polygones en un milliard facettes. Le tout a ralenti en rampant quand il a essayé de fonctionner sur un modèle de voiture de production avec plus de 100 000 polygones à subdiviser, auquel cas il ne pouvait même pas faire 2 ou 3 niveaux de subdivision sans ralentir en rampant. En termes simples, il a écrit du code qui était super optimisé pour des tailles d'entrée irréalistes de petite taille qui ne
Vous devez optimiser les cas d'utilisation réels alignés sur les intérêts de vos utilisateurs, sinon c'est pire qu'inutile, car toutes ces optimisations qui tendent à dégrader au moins quelque peu la maintenabilité du code ont peu d'avantages pour l'utilisateur et seulement tous les négatifs pour la base de code.