З особистого досвіду 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); });
внутрішню частину, але секундомір зупиняється, перш ніж все буде зроблено.