Возможный дубликат:
Как измерить продолжительность работы функции?
У меня есть метод ввода-вывода времени, который копирует данные из одного места в другое. Какой самый лучший и самый реальный способ расчета времени выполнения? Thread
? Timer
? Stopwatch
? Любое другое решение? Я хочу самый точный и максимально краткий.
ThreadPool.QueueUserWorkItem(delegate { CopyFiles(folder, dest); });
внутренняя часть, но секундомер останавливается прежде, чем все будет сделано.Исходя из личного опыта,
System.Diagnostics.Stopwatch
класс можно использовать для измерения времени выполнения метода, однако, ВНИМАНИЕ : он не совсем точен!Рассмотрим следующий пример:
Пример результатов
Теперь вам интересно; "Ну, почему это заняло 132 мс в первый раз, и значительно меньше в остальное время?"
Ответ заключается в том,
Stopwatch
что не компенсирует активность «фонового шума» в .NET, такую как JITing. Поэтому при первом запуске вашего метода, .NET JIT первым. Время, необходимое для этого, добавляется ко времени выполнения. Точно так же другие факторы также могут привести к изменению времени выполнения.Что вам действительно нужно для абсолютной точности, так это профилирование производительности !
Посмотрите на следующее:
RedGate ANTS Performance Profiler является коммерческим продуктом, но дает очень точные результаты. - Повысьте производительность своих приложений с помощью профилирования .NET
Вот статья StackOverflow по профилированию: - Что такое хорошие профилировщики .NET?
Я также написал статью о профилировании производительности с помощью секундомера, на которую вы можете взглянуть - Профилирование производительности в .NET
источник
StopWatch
класс ищет ваше лучшее решение.Также у него есть статическое поле с именем
Stopwatch.IsHighResolution
. Конечно, это проблема оборудования и операционной системы.источник
Если вы заинтересованы в понимании производительности, лучший ответ - использовать профилировщик.
В противном случае System.Diagnostics.StopWatch предоставляет таймер высокого разрешения.
источник
StopWatch будет использовать счетчик высокого разрешения
Если вы измеряете IO, то на ваши цифры, скорее всего, будут влиять внешние события, и я бы очень сильно волновался. точность (как вы указали выше). Вместо этого я бы взял ряд измерений и рассмотрел среднее значение и распределение этих цифр.
источник
источник