PowerShell 时间跨度非常适合快速显示持续时间,例如:
$starttime = $(get-date)
{ do some processing here }
write-host "Duration: $((new-timespan $starttime $(get-date)).tostring())"
但是,如果我$loopcount
在该时间范围内进行了处理迭代,我如何将持续时间除以$loopcount
得到每次迭代的平均持续时间?
PowerShell 时间跨度非常适合快速显示持续时间,例如:
$starttime = $(get-date)
{ do some processing here }
write-host "Duration: $((new-timespan $starttime $(get-date)).tostring())"
但是,如果我$loopcount
在该时间范围内进行了处理迭代,我如何将持续时间除以$loopcount
得到每次迭代的平均持续时间?
如果这样做(如果您不需要脚本块的输出),那么更好的方法可能是:
1..$loopcount | ForEach-Object {
Measure-Command {
# do some processing here
}
} | Measure-Object -Average TotalSeconds
在这里,您可以根据需要进行调整。
$StartTime = Get-Date
{ <#do some processing here#> }
$TimeSpan = New-TimeSpan $StartTime (Get-Date)
$AverageTimeSpan = New-TimeSpan -Seconds ($TimeSpan.TotalSeconds / $LoopCount)
秒是最好的单位。
好的,我尝试将此添加为评论,但代码的格式仅限于评论中,所以我将其作为另一个答案。
我有类似的需求,但我正在循环一个集合,需要测量集合中每个元素的 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