Арифметика с промежутками времени PowerShell - PullRequest
5 голосов
/ 21 августа 2010

Временные интервалы PowerShell отлично подходят для быстрого отображения продолжительности, например:

$starttime = $(get-date)
{ do some processing here }
write-host "Duration: $((new-timespan $starttime $(get-date)).tostring())"

Но если я выполнил $loopcount итераций обработки в течение этого периода времени, как мне разделить длительность на $loopcount, чтобы получить среднюю продолжительность за итерацию?

Ответы [ 3 ]

9 голосов
/ 21 августа 2010

Немного более приятный способ сделать это (если вам не нужен вывод из вашего блока скриптов), вероятно, будет:

1..$loopcount | ForEach-Object {
    Measure-Command {
        # do some processing here
    }
} | Measure-Object -Average TotalSeconds
2 голосов
/ 21 августа 2010

Вот, пожалуйста, вы можете настроить при необходимости.

$StartTime = Get-Date
{ <#do some processing here#> }

$TimeSpan = New-TimeSpan $StartTime (Get-Date)
$AverageTimeSpan = New-TimeSpan -Seconds ($TimeSpan.TotalSeconds / $LoopCount)

Секунды - лучшая единица для этого.

0 голосов
/ 27 сентября 2017

Хорошо, я пытался добавить это как комментарий, но форматирование кода было просто ограничено в комментарии, поэтому я сделаю это как другой ответ.

У меня была похожая необходимость,но я перебирал коллекцию и мне нужно было измерить 2 разные операции для каждого элемента в коллекции, и я хотел подвести итог всего времени, которое потребовалось для каждой операции.

Вот что я сделал:

$opATot = New-TimeSpan
$opBTot = New-TimeSpan
$myData | %{
   $opA = Measure-Command -Expression { do-op-a $_ }
   $opB = Measure-Command -Expression { do-op-b $_ }
   $opATot = $opATot.add( $opA )
   $opBTot = $opBTot.add( $opB )
}
"Op A took " + $opATot
"Op B took " + $opBTot
...