2010-08-20 60 views
4

PowerShell的時間跨度是偉大的快速顯示的持續時間,如:算術使用PowerShell的時間跨度

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

但是,如果我這個時間範圍內沒有處理的$loopcount迭代,我怎麼除以$loopcount期間獲得的平均每次迭代的持續時間?

回答

8

稍微更好的方式,如果這樣做,(如果你不需要從你的腳本塊輸出)很可能是:

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

很好的答案 - 我根據個人美學對其他答案給予了略微的優勢。 – 2010-08-24 21:24:29

2

在這裏,你可以根據需要調整。

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

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

秒數是用於此的最佳單位。

+0

偉大的答案 - 我希望我能獲獎的兩個答案 – 2010-08-24 21:22:40

+0

你知道,這是不是很大畢竟。這不是真正的測量每個迭代,只是估計。 – JasonMArcher 2010-08-24 23:28:46

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

您可以通過計算所做的迭代次數來添加到此模式,然後通過將總秒數除以循環計數來執行最後的平均計算。 – Jim 2017-09-27 19:46:54