2011-02-14 15 views
6

Tengo un enigma aquí. He estado tratando de acelerar una determinada función, ahora cuando ejecuto mi aplicación, lleva entre 16 y 17 segundos ejecutar esta función.¿Por qué mi código es más rápido cuando se ejecuta con Performance Analysis?

Ahora si ejecuto lo mismo con Performance Analysis ejecutándose a su lado en VS2010, para encontrar las secciones más lentas, el código se ejecuta en ~ 6-7 segundos. Ahora, si mi código se ejecutó tan rápido, sería perfectamente aceptable para la aplicación.

He intentado ejecutar el código (sin análisis de perf) a través de los perfiles de depuración y liberación, con poca o ninguna diferencia.

¿Alguien tiene alguna idea de lo que puede estar ocurriendo aquí?

Algunas notas: la función en cuestión utiliza bastante LINQ to SQL y el análisis de rendimiento que estoy utilizando es CPU Sampling.

+0

Heisenbug. ¿Obtienes los mismos 16-17 segundos si compilas en modo de lanzamiento (frente a la depuración)? – Robaticus

+0

¿Y ejecutó el programa fuera de VS? Simplemente ejecutar un programa en VS con el depurador conectado deshabilita muchas optimizaciones de jitter. – CodesInChaos

+0

Robaticus, sí (como se indicó). CodeInChaos: noto una gran diferencia entre el VS externo y el interno, sí, pero esperaba eso. –

Respuesta

4

Creo que debes enfocarte en las partes más lentas de tu código y optimizarlas de todos modos si identificas lo que lleva más tiempo que otras partes, no te importa la duración absoluta en segundos, sino solo pensar en relativa.

Incluso si ve que la aplicación completa se ejecuta en 7 segundos, si hay métodos que toman el 40% de este tiempo intente optimizarlos, seguramente obtendrá beneficios de esta puesta a punto incluso sin el Análisis de rendimiento habilitado y el total el tiempo de ejecución caerá aún más si inicialmente fue de alrededor de 17 segundos.

+0

+1 para el asesoramiento, puede pasar más tiempo optimizando que investigando por qué la diferencia de tiempo. –

+0

Bueno, sí, pero el problema es que está perfectamente optimizado "dentro" del análisis pero no afuera. –

1

¿Ve que se cargan muchos dll al ingresar a la función en el caso de análisis de no rendimiento? Me pregunto si al ingresar a esta función está causando que se carguen muchas dlls, que en el caso de análisis de rendimiento ya se han cargado antes.

+0

No realmente, no - o al menos nada unsual –

+0

Agregue declaraciones de seguimiento a su función con una marca de fecha y hora e intente restringir dónde está ocurriendo la desaceleración, de dónde vienen los 16-17 segundos, consulte la hora de escritura antes la llamada a la función, y luego a la derecha al ingresar, sea liberal en este momento, porque parece que tendrá que hacer su análisis de desempeño a la manera antigua. –

+0

Bueno, logré localizar el problema y lo solucioné, pero la pregunta estaba dirigida a "por qué" ocurrió el problema en lugar de cómo evitar ese problema –

Cuestiones relacionadas