Possível duplicado:
Como faço para medir quanto tempo uma função está em execução?
Eu tenho um método de tomada de tempo de E / S que copia dados de um local para outro. Qual é a melhor e mais real maneira de calcular o tempo de execução? Thread
? Timer
? Stopwatch
? Alguma outra solução? Quero o mais exato e o mais breve possível.
ThreadPool.QueueUserWorkItem(delegate { CopyFiles(folder, dest); });
interior, mas o cronômetro para antes que tudo seja feito.Por experiência pessoal, a
System.Diagnostics.Stopwatch
classe pode ser usada para medir o tempo de execução de um método, no entanto, CUIDADO : Não é totalmente preciso!Considere o seguinte exemplo:
Resultados de exemplo
Agora você está se perguntando; "bem, por que demorou 132ms na primeira vez e significativamente menos no restante do tempo?"
A resposta é que
Stopwatch
não compensa a atividade de "ruído de fundo" no .NET, como o JITing. Portanto, na primeira vez em que você executa seu método, o .NET JIT é o primeiro. O tempo que leva para fazer isso é adicionado ao tempo da execução. Da mesma forma, outros fatores também farão com que o tempo de execução varie.O que você realmente deveria procurar por precisão absoluta é o Perfil de Desempenho !
Dê uma olhada no seguinte:
O RedGate ANTS Performance Profiler é um produto comercial, mas produz resultados muito precisos. - Melhore o desempenho de seus aplicativos com o perfil .NET
Aqui está um artigo do StackOverflow sobre criação de perfil: - Quais são alguns bons perfis de .NET .NET?
Também escrevi um artigo sobre o perfil de desempenho usando cronômetro que você pode querer olhar - perfil de desempenho no .NET
fonte
StopWatch
A classe procura sua melhor solução.Também possui um campo estático chamado
Stopwatch.IsHighResolution
. Obviamente, esse é um problema de hardware e sistema operacional.fonte
Se você estiver interessado em entender o desempenho, a melhor resposta é usar um criador de perfil.
Caso contrário, System.Diagnostics.StopWatch fornece um timer de alta resolução.
fonte
O StopWatch usará o contador de alta resolução
Se você estiver medindo IO, seus números provavelmente serão impactados por eventos externos, e eu me preocuparia muito. exatidão (como você indicou acima). Em vez disso, eu faria uma série de medições e consideraria a média e a distribuição desses números.
fonte
fonte