(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 は文字列のオブジェクトの配列を返すという違いがあります。