PowerShellで処理時間を計測したいとき、System.Diagnostics.Stopwatch クラスが便利です。
他の言語では、開始時刻と終了時刻の差を求めたりしますが、Stopwatch クラスを使うと楽にできます。
この記事では、Stopwatchクラスの基本的な使い方と、処理の進捗を表示しながら時間を計測するサンプルを紹介します。
Stopwatchクラスの基本
Stopwatchは、処理の開始・停止・経過時間の取得が簡単にできるタイマーです。
# Stopwatchのインスタンスを作成
$sw = [System.Diagnostics.Stopwatch]::StartNew()
# 計測したい処理
Start-Sleep -Seconds 3
# 計測終了
$sw.Stop()
# 結果表示
Write-Host ("処理時間: {0:N3} 秒" -f $sw.Elapsed.TotalSeconds)
実行すると、処理時間: 3.000 秒 のように表示されます。
一定間隔で処理時間を表示する
Stopwatchは単に計測するだけでなく、処理中に進捗や経過時間を表示することも可能です。
$sw = [System.Diagnostics.Stopwatch]::StartNew()
for ($i = 1; $i -le 5; $i++) {
Start-Sleep -Seconds 1
Write-Host ("経過時間: {0:N3} 秒" -f $sw.Elapsed.TotalSeconds)
}
$sw.Stop()
Write-Host ("総処理時間: {0:N3} 秒" -f $sw.Elapsed.TotalSeconds)
Stopwatchの便利ポイント
処理を途中で停止・再開ができます。
$sw.Stop()
# 他の処理
$sw.Start() # 再開