alcune parti del mio programma sono molto lente. e mi chiedevo se c'è uno strumento che posso usare e per esempio può dirmi ok, il metodo runningA() ha preso 100ms, ecc ... o informazioni così utili simili a quello.Qualche strumento che indica per quanto tempo ciascun metodo impiega per essere eseguito?
risposta
Lo spazio dei nomi System.Diagnostics offre una classe utile denominata Stopwatch, che può essere utilizzata per cronometrare parti del codice (pensarlo come un "profiler del povero uomo").
Questo è come si dovrebbe utilizzare:
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // Start timing
// This is what we want to time
DoSomethingWeSuspectIsSlow();
stopwatch.Stop();
Console.WriteLine("It took {0} ms.", stopwatch.ElapsedMilliseconds);
oppure, creare una classe che implementa l'idisposable, che avvia il timer durante la contruction, arresta e scrive su dispose. Quindi puoi cronometrare qualsiasi blocco di codice avvolgendolo con una dichiarazione using! –
Assicurarsi inoltre che il metodo sia stato richiamato almeno una volta prima di cronometrarlo, in modo da non misurare il tempo per la compilazione JIT. –
@ John Gardner - anche il tuo costrutto è utile per ottenere i tempi perf perfetti da un sistema Prod in esecuzione. Accumula i tempi per le parti del workitem con un tag che li identifica e scarica alla fine del workitem. –
Quelli tipo di applicazioni sono noti come "profiler"
Ecco un esempio: example
Se si utilizza Visual Studio Team System v'è un profiler integrato in 'Performance Tools. C'è un sacco di informazioni utili su questo allo this blog.
L'ho trovato estremamente utile nell'identificare lo 20% of my code that runs 80% of the time e quindi cosa dovrei preoccuparmi dell'ottimizzazione.
Un'altra semplice tecnica che può essere sorprendentemente efficace è eseguire il codice di rilascio nel debugger e interromperlo alcune volte (10 o giù di lì può essere sufficiente) mentre è nello stato "occupato" che si sta tentando di diagnosticare . Potresti trovare informazioni ricorrenti sul callstack che ti indirizzano verso l'area di interesse generale. Ancora una volta, la regola 80/20 in vigore.
+1 Ho usato questo metodo di interrupt da prima che i profiler fossero concepiti. Ero confuso che così poche persone lo sapessero. Direi che in realtà identifica l'area di interesse e la regola 80/20 è più simile a 99.9/0.1 –
Purtroppo, il collegamento 80/20 è particolarmente vacuo. –
@ Mike Dunlavey: ne hai uno migliore? Modificherò in caso affermativo. Grazie –
Vedere il nostro SD C# Profiler. Può fornire i tempi delle funzioni della funzione da solo e/o da tutti i suoi calle.
- 1. Quanto tempo impiega Glibc per compilare?
- 2. Timing per quanto tempo ciascun file impiega per compilare con ant
- 3. Quanto tempo impiega la mia applicazione Python per funzionare?
- 4. Quanto tempo impiega il mio codice per l'esecuzione?
- 5. Quanto tempo impiega un programma Python per l'esecuzione?
- 6. Gestione delle eccezioni. Quanto tempo impiega prendere?
- 7. Quanto tempo impiega troppo uno script?
- 8. recupera quanto tempo impiega il sottoprocesso python
- 9. ob_flush richiede molto tempo per essere eseguito
- 10. Per quanto tempo devono essere eseguiti i "percorsi di rastrellamento"?
- 11. L'app impiega troppo tempo per l'avvio
- 12. Come posso calcolare quanto tempo impiega una funzione in jQuery?
- 13. Come verificare quanto tempo impiega la query MySQL?
- 14. Per quanto tempo dovrebbe essere un token "ricordami"?
- 15. per quanto tempo dovrebbe essere necessario installare Xcode 7
- 16. Forza tutto && per essere eseguito?
- 17. Che cosa determina quanto tempo impiega un server COM fuori processo per notare che un client è morto?
- 18. Aggiornamento di eclissi che impiega troppo tempo
- 19. Quanto tempo impiega una query che restituisce 5 milioni di record?
- 20. Per quanto tempo Facebook caching le miniature di condivisione?
- 21. Strumento per misurare Tempo di rendering
- 22. Qualche strumento simile a RSpec per Erlang?
- 23. C# Per quanto tempo l'utente era inattivo
- 24. Per quanto tempo prima che la standardizzazione fosse `stringa` disponibile?
- 25. Powershell impiega molto tempo per essere caricato all'avvio durante il caricamento di ssh-agent/git
- 26. Quali sono i passaggi necessari per inviare un pacchetto R a CRAN e quanto tempo richiede ciascun passo?
- 27. La barra degli strumenti VS2010 impiega troppo tempo per caricare
- 28. Qualche strumento per correggere automaticamente problemi JSLint semplici?
- 29. Qualche strumento per visualizzare l'immagine dell'albero del caricatore di classi?
- 30. Visual Studio 2015 impiega troppo tempo per l'avvio
Si chiama [Profiler] (http://stackoverflow.com/search?q= [c% 23] + profiler). – dtb
Quello che stai cercando si chiama profiler. – GrandmasterB
possibile duplicato di [Quali sono alcuni buoni profilatori .NET?] (Http://stackoverflow.com/questions/3927/what-are-some-good-net-profilers) – dtb