same answer as:
reeditada: Usted preguntó cuáles eran sus opciones. Si su corazón está configurado en la creación de perfiles, busque un generador de perfiles.
Por otro lado, si realmente tiene un problema de rendimiento que encontrar, el método simple funciona tan bien o mejor que casi cualquier generador de perfiles. Digo casi todo, porque en algunos perfiladores realmente puede deducir lo que necesita saber, que es el costo de tiempo atribuible a las instrucciones individuales, especialmente las instrucciones de llamada.
El costo de tiempo de una instrucción es la cantidad de tiempo que se ahorraría si la instrucción se pudiera eliminar, y una buena estimación de ella es la fracción de las muestras de la pila de llamadas que la contiene. No necesita estimar esa fracción con alta precisión.Si la instrucción está en 5 de 10 muestras, su costo es probablemente en algún lugar dentro del rango del 45% al 55%. No importa, si pudiera deshacerse de él, ahorraría su costo.
Por lo tanto, encontrar problemas de rendimiento no es difícil. Simplemente tome una cantidad de muestras de la pila de llamadas, recopile el conjunto de instrucciones en esas muestras y clasifique las instrucciones por la fracción de muestras que las contiene. Entre las instrucciones de fracciones elevadas hay algunas que puedes optimizar, y no tienes que adivinar dónde están.
Estoy simplificando un poco, porque a menudo es útil examinar más información de estado que solo la pila de llamadas, para ver si realmente se necesita algún trabajo. Pero espero que el punto esté hecho.
Las personas expresan dudas de que podría funcionar en presencia de recursión, o trabajar en programas grandes. Un poco de pensamiento (y experimentación) muestra que esas objeciones no se sostienen.
Tenga en cuenta que el libre es realmente muy bueno para el rastreo de memoria * * asignación, pero el análisis Potencia recta que arrastra los otros sistemas. No hay archivos que conozco que admitan perfiles de modo mixto o muestreo en lugar de instrumentación. AQTime y el sistema Team uno hacen esto – ShuggyCoUk
. Probé con la demo de dotTrace. Esperaba que no fuera lo que esperaba, pero lo fue. Te inunda con cosas bellamente presentadas que no importan. Lo que sí importa es que gasta más del 90% de su tiempo en la llamada a 'myBitmap.SetPixel', y el pequeño resto en varios lugares, como intersectar un rayo con una esfera, como se muestra fácilmente con no muchas pausas. Navegué por todos lados en DT, pero nada allí me dijo lo que me dijeron las pausas. –
@MikeDunlavey: Realmente no tengo suficiente contexto para entender ese comentario, pero dotTrace ciertamente me ha ayudado a encontrar cuellos de botella en Noda Time ... –