Code Aquarium

minazoko's blog -*- 水底のブログ -*-

(PowerShell) 簡易 timeit

Windowsでコマンドの処理時間計測したい場合みなさんどうしてるんでしょうかね。
PowerShell使えばそういうコマンドがあるだろうと思ったのですが、いやあるにはあるんです Measure-Command が。

PS C:\wk> measure-command {ping localhost}

でもこのコマンド計測結果を返すだけで、対象コマンドの標準出力を隠してしまうんです。
Windowsコマンドの方でログを吐かせて、別のTerminalで cat -tail すれば良いかな、とも思ったのですがそれも手間。
結局、悩んだりググったりよりはコマンドを作ってしまった方が早いという結論。
こんなワンライナー

PS C:\wk> function timeit($cmd){$t0=(get-date); &$cmd; (get-date)-$t0}

こう使います。

PS C:\wk> timeit {ping localhost}

yourhostname [::1]に ping を送信しています 32 バイトのデータ:
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms

::1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 3
Milliseconds      : 171
Ticks             : 31719497
TotalDays         : 3.6712380787037E-05
TotalHours        : 0.000881097138888889
TotalMinutes      : 0.0528658283333333
TotalSeconds      : 3.1719497
TotalMilliseconds : 3171.9497



PS C:\wk>

返却値は、Measure-CommandがTimeSpanオブジェクトを返し、
timeit は文字列のオブジェクトの配列を返すという違いがあります。