Исходя из личного опыта, System.Diagnostics.Stopwatch
класс можно использовать для измерения времени выполнения метода, однако, ВНИМАНИЕ : он не совсем точен!
Рассмотрим следующий пример:
Stopwatch sw;
for(int index = 0; index < 10; index++)
{
sw = Stopwatch.StartNew();
DoSomething();
Console.WriteLine(sw.ElapsedMilliseconds);
}
sw.Stop();
Пример результатов
132ms
4ms
3ms
3ms
2ms
3ms
34ms
2ms
1ms
1ms
Теперь вам интересно; "Ну, почему это заняло 132 мс в первый раз, и значительно меньше в остальное время?"
Ответ заключается в том, Stopwatch
что не компенсирует активность «фонового шума» в .NET, такую как JITing. Поэтому при первом запуске вашего метода, .NET JIT первым. Время, необходимое для этого, добавляется ко времени выполнения. Точно так же другие факторы также могут привести к изменению времени выполнения.
Что вам действительно нужно для абсолютной точности, так это профилирование производительности !
Посмотрите на следующее:
RedGate ANTS Performance Profiler является коммерческим продуктом, но дает очень точные результаты. - Повысьте производительность своих приложений с помощью профилирования .NET
Вот статья StackOverflow по профилированию: - Что такое хорошие профилировщики .NET?
Я также написал статью о профилировании производительности с помощью секундомера, на которую вы можете взглянуть - Профилирование производительности в .NET
ThreadPool.QueueUserWorkItem(delegate { CopyFiles(folder, dest); });
внутренняя часть, но секундомер останавливается прежде, чем все будет сделано.