Я хочу знать, сколько времени требуется для завершения процедуры / функции / заказа, в целях тестирования.
Это то, что я сделал, но мой метод неправильный, потому что, если разница в секундах равна 0, я не могу вернуть прошедшие миллисекунды:
Обратите внимание, что значение сна составляет 500 мс, поэтому прошедшие секунды равны 0, тогда он не может возвращать миллисекунды.
Dim Execution_Start As System.DateTime = System.DateTime.Now
Threading.Thread.Sleep(500)
Dim Execution_End As System.DateTime = System.DateTime.Now
MsgBox(String.Format("H:{0} M:{1} S:{2} MS:{3}", _
DateDiff(DateInterval.Hour, Execution_Start, Execution_End), _
DateDiff(DateInterval.Minute, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End) * 60))
Может кто-нибудь показать мне лучший способ сделать это? Может быть с собой TimeSpan
?
Решение:
Dim Execution_Start As New Stopwatch
Execution_Start.Start()
Threading.Thread.Sleep(500)
MessageBox.Show("H:" & Execution_Start.Elapsed.Hours & vbNewLine & _
"M:" & Execution_Start.Elapsed.Minutes & vbNewLine & _
"S:" & Execution_Start.Elapsed.Seconds & vbNewLine & _
"MS:" & Execution_Start.Elapsed.Milliseconds & vbNewLine, _
"Code execution time", MessageBoxButtons.OK, MessageBoxIcon.Information)
DateTime.Now
из-за проблем с переходом на летнее время и часовым поясом. Пожалуйста, прочтите мой блог по этой темеОтветы:
Лучше использовать секундомер вместо
DateTime
различий.Класс секундомера - Microsoft Docs
источник
Thread.Sleep
, это просто как образец кода, чтобы показать задержку .... на самом деле вам следует избегать использованияThread.Sleep
где-либо в вашем кодеStopwatch
измеряет прошедшее время.Вот файл
DEMO
.источник
Stopwatch
поверх каждой строки и остановите ее после каждой строки. Помните, что вам нужно использовать такжеStopwatch.Reset
on после каждой строки для расчета. На основе вашей линии; взгляните ideone.com/DjR6bastopwatch.Elapsed.ToString(@"d\.hh\:mm\:ss")
который кажется более чистым способом для меня.Вы можете использовать эту обертку секундомера:
Использование:
Вывод:
Для расширенных сценариев, вы можете использовать BenchmarkDotNet или Benchmark.It или Nbench
источник
Если вы используете класс Stopwatch, вы можете использовать метод .StartNew () для сброса часов на 0. Таким образом, вам не нужно вызывать .Reset (), а затем .Start (). Может пригодиться.
источник
Секундомер разработан для этой цели и является одним из лучших способов измерения времени выполнения в .NET.
Не используйте DateTimes для измерения времени выполнения в .NET.
источник
Если вы ищете количество времени, которое связанный поток потратил на выполнение кода внутри приложения.
Вы можете использовать
ProcessThread.UserProcessorTime
свойство, которое вы можете получить вSystem.Diagnostics
пространстве имен.Примечание. Если вы используете многопоточность, вы можете рассчитать время каждого потока отдельно и суммировать его для расчета общей продолжительности.
источник
Мне не удалось увидеть версию vb.net о том, как можно использовать класс секундомера, поэтому я привел пример ниже.
Надеюсь, это поможет любому, кто пришел к этому вопросу, ищущему vb.net.
источник