Por lo general, serán funciones más carnosas en la mayoría de los casos, no las funciones llamadas con mayor frecuencia mil millones de veces en un bucle.
Cuando realiza perfiles basados en muestras (con una herramienta o a mano), a menudo los puntos de acceso más grandes estarán en pequeñas llamadas frondosas que hacen cosas simples, como una función para comparar dos enteros.
Esa función a menudo no se beneficiará de mucha, si es que hay alguna, optimización. Por lo menos, esos puntos de acceso granulares rara vez son la máxima prioridad. Es la función que llama a esa función de hoja la que podría ser la causa de problemas, o la función que llama a la función que llama a la función, como un algoritmo de clasificación subóptimo. Con buenas herramientas, puede profundizar de la persona que llama a la persona que llama, y también ver quién pasa más tiempo llamando a la persona que llama.
A menudo es un error obsesionarse con los callejeros y no mirar a las personas que llaman en el gráfico de llamadas en una sesión de creación de perfiles a menos que esté haciendo las cosas de manera muy ineficiente a nivel micro. De lo contrario, podría estar sudando demasiado las cosas pequeñas y perder de vista el panorama general. El solo hecho de tener un perfilador en la mano no lo protege de la obsesión por cosas triviales. Es solo un primer paso en la dirección correcta.
También debe asegurarse de que está perfilando las operaciones que se alinean con las cosas que los usuarios realmente quieren hacer, de lo contrario, ser totalmente disciplinado y científico en sus mediciones y puntos de referencia no tiene valor, ya que no se alinea con lo que los clientes hacen con el producto. Una vez tuve un colega que desactivó un algoritmo de subdivisión para subdividir un cubo en mil millones de facetas y se enorgulleció mucho de eso ... excepto que los usuarios no subdividen los cubos simples de 6 polígonos en mil millones facetas Todo se ralentizó cuando trató de funcionar en un modelo de automóvil de producción con más de 100,000 polígonos para subdividir, en cuyo punto ni siquiera podía hacer 2 o 3 niveles de subdivisión sin reducir la velocidad a un rastreo. En pocas palabras, escribió un código que estaba súper optimizado para tamaños de entrada poco realistas que no
Debe optimizar los casos de uso reales alineados con los intereses de sus usuarios o de lo contrario es peor que inútil, ya que todas esas optimizaciones que tienden a degradar al menos algo la capacidad de mantenimiento del código tienen pocos beneficios para el usuario y solo todos esos aspectos negativos para la base de código.