One could use a profiler, but why not just halt the program? [cerrado]
Si algo está haciendo que un programa de un solo hilo tome, digamos, 10 veces más de lo que debería, podría ejecutar un generador de perfiles en él. También podría detenerlo con un botón de "pausa", y verá exactamente lo que está haciendo.
Incluso si es solo un 10% más lento de lo que debería ser, si lo detiene más veces, en poco tiempo verá que repetidamente hace lo innecesario. Por lo general, el problema es una llamada a la función en algún lugar en el medio de la pila que realmente no se necesita. Esto no mide el problema, pero seguro que lo encuentra.
Editar: Las objeciones en su mayoría suponen que solo tomas 1 muestra. Si habla en serio, tome 10. Cualquier línea de código que cause algún porcentaje de desperdicio, como 40%, aparecerá en la pila en esa fracción de muestras, en promedio. Los cuellos de botella (en código de un solo hilo) no pueden esconderse de él.
EDITAR: Para mostrar lo que quiero decir, muchas objeciones son de la forma "no hay suficientes muestras, por lo que lo que ves podría ser completamente falso", ideas vagas sobre el azar. Pero si algo decualquier descripción reconocible, no solo estar en una rutina o si la rutina está activa, tiene efecto el 30% del tiempo, entonces la probabilidad de verla en cualquier muestra es del 30%.
Luego suponga que solo se toman 10 muestras. El número de veces que se verá el problema en 10 muestras sigue unDistribución binomial, y la probabilidad de verlo 0 veces es .028. La probabilidad de verlo 1 vez es .121. Para 2 veces, la probabilidad es .233, y para 3 veces es .267, después de lo cual se cae. Dado que la probabilidad de verlo menos de dos veces es .028 + .121 = .139, eso significa que la probabilidad de verlo dos o más veces es 1 - .139 = .861. La regla general es que si ve algo que podría arreglar en dos o más muestras, vale la pena arreglarlo.
En este caso, la posibilidad de verlo en 10 muestras es del 86%. Si está en el 14% que no lo ve, simplemente tome más muestras hasta que lo haga. (Si el número de muestras aumenta a 20, la posibilidad de verlo dos o más veces aumenta a más del 99%). Por lo tanto, no se ha medido con precisión, pero se ha encontrado con precisión, y es importante comprender que fácilmente podría ser algo que un generador de perfiles no podría encontrar realmente, como algo relacionado con el estado de los datos, no el contador del programa.