2010-01-06 6 views
5

Me gustaría poder calcular la cantidad de tiempo que varias funciones tardan en ejecutarse. Estaba pensando en usar algún tipo de clase de cronómetro. Puedo llamar a inicio/detención antes y después de cada llamada de función, sin embargo, eso me parece horriblemente feo. ¿Hay alguna manera de hacer esto sin una clase de cronómetro? ¿Puede algo en la clase Reflections ayudar con esto?C# 2.0 Temporizador de tiempo de ejecución

Gracias de antemano por su aporte.

+2

¿Qué hay de malo con la clase Cronómetro (System.Diagnostics.Stopwatch)? –

+0

No hay nada _corrono_ con eso. Si esa es la mejor manera, estoy de acuerdo con eso. Solo busco algo un poco más dinámico y quiero evitar ensuciar mi código con inicio/detención. –

+0

@Martinho: J.Hendrix quiere hacer un perfil de cada llamada de función. Eso es factible con Cronómetro, pero probablemente no sea la mejor solución para el perfil de toda la solución. Tenga en cuenta que las respuestas a continuación sugieren perfiladores externos. –

Respuesta

3

Creo u debe tratar de la manera PostSharp http://www.postsharp.org/

Cambiar el código de la muestra para éste:

public class ProfileMethodsAttribute : OnMethodBoundaryAspect 
{ 
    public override void OnEntry(MethodExecutionEventArgs eventArgs) 
    { eventArgs.MethodExecutionTag = Stopwatch.StartNew(); } 

    public override void OnExit(MethodExecutionEventArgs eventArgs) 
    { 
    // Here u can get the time 
    Console.WriteLine(((Stopwatch)eventArgs.MethodExecutionTag).ElapsedMilliseconds); 
    } 
} 

Usted puede obtener el tiempo de descuento en cualquier método

+0

+1 Esto se ve bien hasta ahora. –

2

Recomiendo el patrocinador de la etiqueta de rendimiento ... Red Gate Ants. Puede obtener una demostración que ejecutará su aplicación y le dará información de rendimiento para cada línea y cada método al que acceda su aplicación mientras se está perfilando.

0

Hay varios temporizadores. System.Timers.Timer sería uno de esos. Pero como sugiere la respuesta anterior, ¿está seguro de que esta es la solución correcta para el problema que en realidad está tratando de resolver?

+0

No, no estoy seguro. Tengo algunas ideas, pero muy abierto a sugerencias. ¡Gracias! –

1

Creo que deberías pensar en usar perfiles de código ... ¿Usar una aplicación externa como Ants Profiler para perfilar tu código? Hormigas es de Red Gate y no es gratis, pero creo que también hay algunas aplicaciones de código libre/abierto.

Algunos free/open source profilers here ...

Está bien cronómetro un método que aquí y allá, pero tratando de hacer que por cada método en su solución podría convertirse rápidamente en poco manejable.

+0

Voy a echar un vistazo a las hormigas. Mi idea era poder encenderlo y apagarlo usando algún tipo de bandera. Quiero poder ejecutarlo en un entorno de producción para ayudar a solucionar problemas de red, SQL u otros cuellos de botella IO. –

1

podría poner la clase de cronómetro en un atributo utilizado para decorar sus métodos, es decir, el estilo de AOP. echa un vistazo a this

+0

+1 ¡Agradable! Creo que esto es lo que estoy buscando. Nunca he decorado un método antes. ¿Funcionará esto en 2.0? ¿Debo agregar alguna referencia al proyecto? –

Cuestiones relacionadas