3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PowerShell】処理時間を測定する

Last updated at Posted at 2023-12-23

はじめに

PowerShellで作ったスクリプトのパフォーマンスの尺度として、処理時間の測定方法を調べた結果を記事としてまとめてみました。

学習環境

今回はコマンドプロンプトとVS Codeを使いました。

コマンドプロンプト(DOS)を使う方法

  • PowerShellで処理時間を求める前に、比較対象としてコマンドプロンプトを使う方法をまとめておきます。
  • コマンドプロンプトだとtimeを使って現在の時刻を求めますが、以下のように開始時間と終了時間から自力で処理時間を求めることになります。
processing_time.bat
set start_time=%time%
rem pingをsleepの代わりに利用
Ping -n 3 localhost > null
set end_time=%time%

echo %start_time%
echo %end_time%
実行結果
11:58:14.16
11:58:16.21

PowerShellを使う方法

  • PowerShellではMeasure-Command関数を使って処理時間を求めます。
  • スクリプトブロックを使うことで簡単に処理時間を求めることができますが、「日」「時」「分」「秒」「ミリ秒」のそれぞれの単位での結果が混在していて、これだと見づらいですね...
processing_time.ps1
Measure-Command {
    Start-Sleep -Seconds 3
}
実行結果
Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 3
Milliseconds      : 12
Ticks             : 30121641
TotalDays         : 3.48630104166667E-05        
TotalHours        : 0.00083671225
TotalMinutes      : 0.050202735
TotalSeconds      : 3.0121641
TotalMilliseconds : 3012.1641
  • そこで以下のように修正してみると、欲しかった「秒単位の処理時間」だけを求めることができました。
    • コマンドプロンプトのtimeを使うよりも、これなら圧倒的に楽でスッキリ書けますね。
  • 戻り値はTimeSpan構造体で、この構造体のプロパティの扱いには注意が必要です。
    • Seconds「日/時/分/秒/ミリ秒で表現した時の秒部分の値」 で、処理時間が70秒の時は「69」などとなります。
    • TotalSeconds「処理時間を秒で表現した値(小数部含む)」 で、処理時間が70秒の時は「69.9977058」などとなります。
processing_time2.ps1
$prcessing_time = Measure-Command {
    Start-Sleep -Seconds 3
}

Write-Host "$($prcessing_time.TotalSeconds) seconds"
実行結果2
3.0008739 seconds

参考URL

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?