2010-01-06 15 views
5

Mi piacerebbe essere in grado di calcolare la quantità di tempo che un numero di funzioni richiede per eseguire. Stavo pensando di usare un tipo di lezione di cronometro. Posso chiamare start/stop prima e dopo ogni chiamata di funzione, tuttavia mi sembra orribilmente brutto. C'è un modo per farlo senza una lezione di cronometro? Può qualcosa nella classe Reflections aiutare con questo?C# 2.0 Timer tempo di esecuzione

Grazie in anticipo per l'inserimento.

+2

Cosa c'è che non va con la classe Cronometro (System.Diagnostics.Stopwatch)? –

+0

Non c'è niente _wrong_ con esso. Se quello è il modo migliore, allora sto bene con quello. Sto solo cercando qualcosa di un po 'più dinamico e volevo evitare di sporcare il mio codice con start/stop. –

+0

@ Martin: J. Hendrix vuole profilare ogni singola chiamata di funzione. È fattibile con Stopwatch ma probabilmente non è la soluzione migliore per la profilazione a livello di soluzione. Nota le risposte qui sotto suggeriscono profiler esterni. –

risposta

3

Credo che u deve provare la strada PostSharp http://www.postsharp.org/

Cambiare il codice di esempio per questo:

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); 
    } 
} 

è possibile ottenere il tempo fuori qualsiasi metodo

+0

+1 Questo sembra buono finora. –

2

Raccomando lo sponsor del tag delle prestazioni ... Red Gate Ants. Puoi ottenere una demo che eseguirà la tua app e fornirti informazioni sulle prestazioni per ogni linea e ogni metodo che la tua app ha colpito mentre viene profilata.

0

Ci sono vari timer. System.Timers.Timer sarebbe uno di questi. Ma come suggerisce la risposta precedente, sei sicuro che questa sia la giusta soluzione al problema che stai effettivamente cercando di affrontare?

+0

No, non sono sicuro. Ho alcune idee, ma molto aperto ai suggerimenti. Grazie! –

1

penso che dovresti pensare all'utilizzo del codice di profilazione ... Usa un'applicazione esterna come Ants Profiler per profilare il tuo codice? Le formiche provengono da Red Gate e non sono gratuite, ma penso che ci siano anche alcune app gratuite/open source.

Alcuni free/open source profilers here ...

E 'ok per cronometro un metodo qua e là, ma cercando di fare che per ogni metodo nella soluzione sarebbe rapidamente diventato ingombrante.

+0

Darò un'occhiata a Formiche. Il mio pensiero era di essere in grado di accenderlo e spegnerlo usando una sorta di bandiera. Voglio essere in grado di eseguirlo in un ambiente di produzione per aiutare a risolvere problemi di rete, SQL o altri flaconi di I/O. –

1

potresti mettere la classe del cronometro in un attributo usato per decorare i tuoi metodi, cioè lo stile AOP. controllare this

+0

+1 Nizza! Penso che questo sia quello che sto cercando. Non ho mai decorato un metodo prima. Funzionerà in 2.0? Devo aggiungere qualche riferimento al progetto? –