使用 PowerShell 时间跨度进行算术

问题描述 投票:0回答:4

PowerShell 时间跨度非常适合快速显示持续时间,如下所示:

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

但是,如果我在该时间范围内进行了

$loopcount
次处理迭代,我如何将持续时间除以
$loopcount
以获得每次迭代的平均持续时间?

powershell timespan
4个回答
10
投票

如果这样做(如果您不需要脚本块的输出),一个稍微更好的方法可能是:

1..$loopcount | ForEach-Object {
    Measure-Command {
        # do some processing here
    }
} | Measure-Object -Average TotalSeconds

4
投票

就这样,您可以根据需要进行调整。

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

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

秒是为此使用的最佳单位。


0
投票

好吧,我尝试将其添加为注释,但代码的格式仅限于注释,所以我将其作为另一个答案。

我有类似的需求,但我正在循环一个集合,需要测量集合中每个元素的 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

0
投票

不完全是所问的问题,但这个例子可能对登陆这里的人有用。

从一个日期时间中减去另一个日期时间 ($t2-$t1) 会隐式产生一个时间跨度。 时间跨度具有可用于计算的 TotalSeconds 属性。

示例:在日期时间 $t1,流程已完成 $p1 流程步骤。 在 $t2,$p2 处理步骤。 共有 $ptotal 步骤。

预计完成时间:

$t1.AddSeconds( ($t2-$t1).totalseconds * ( $ptotal / ($p2-$p1) ) )
© www.soinside.com 2019 - 2024. All rights reserved.