Windowsでコマンドまたはプログラムの合計実行時間を確認する
実行するコマンドまたはプログラムの合計実行時間を知りたい場合があります。 スクリプトまたはプログラムを最適化するには、実行が完了するまでにかかる時間を知ることが不可欠です。 これは、特にプロのソフトウェア開発者、アナリスト、またはソフトウェアテスターである場合、プログラムAとプログラムBの合計実行時間を比較し、コードを最適化するのに役立ちます。
スクリプトまたはプロセスの合計実行時間の測定は、パフォーマンス最適化の最も重要な側面の1つです。 この記事では、Windowsでプログラム、スクリプト、またはコマンドの合計実行時間を見つけるためのさまざまな方法について説明します。
プログラムまたはコマンドの合計実行時間を見つける
PowerShellの使用
PowerShellには、スクリプトブロック、コマンドレット、または外部プログラムの実行にかかる時間を測定するのに役立つ組み込みのMeasure-Command
コマンドレットが含まれています。 以下は、 ping google.com
コマンドラインが完了するまでにかかる時間を測定するPowerShellコマンドラインの例です。
Measure-Command Out-Host
pingコマンドの出力後、下部に次の統計が表示されます。
日:0時間:0分:0秒:3ミリ秒:66ティック:30660017合計日:3.5486130787037E-05合計時間:0.000851667138888889合計分:0.0511000283333333合計秒:3.0660017合計ミリ秒:3066.0017
Microsoft DocsでMeasure-Objectの詳細を読んでください。
コマンドの完了には3.06秒かかりました。 Out-Host
引数を省略した場合、PowerShellはコンソールで( Ping
コマンドの)出力を非表示にします。実行統計のみが表示されます。
長いコマンドラインがある場合、または複数のコマンドを実行する必要がある場合は、それらをWindowsバッチファイルに入れて、PowerShellを使用して実行できます。 次に例を示します。
Measure-Command Start-Process "d:\ batch \ backup.bat"関連: PowerShellを使用してテキストファイル内の単語、文字、行の数を見つける
VBScriptの使用
次に、コマンドライン、プログラム、またはバッチファイルの合計実行時間を計算する単純なVBScriptを示します。
Set WshShell = WScript.CreateObject( "WScript.Shell")sCmd = chr(34)& "D:\ Batch Files \ Backup.bat"&chr(34)dtmStartTime = Timer Return = WshShell.Run(sCmd、1、true )Wscript.Echo ""&Round(Timer-dtmStartTime、2)& "秒で完了したタスク。"
- 上記のコードをメモ帳にコピーします
- ファイルを
exec_timer.vbs
として保存します。 sCmd
で始まる2行sCmd
、実行するプログラムを変更します。つまり、上記の例の"D:\Batch Files\Backup.bat"
を、実行するアプリケーションまたはバッチに置き換えます。- ファイルを保存してメモ帳を閉じます。
- VBScriptファイルをダブルクリックして実行します。
VBScriptは、バッチファイル、コマンド、またはプログラムを起動します。 実行が完了すると、合計実行時間が表示されます(秒単位)。
リソースキットツールのTimeIt.exeの使用
TimeIt.exe
は、プログラムまたはコマンドの実行タイミングを示すWindows Server 2003リソースキットツールの一部です。 このプログラムはWindows 10でも正常に動作します。
- RKツールをダウンロードした後、7-Zipを使用してrktools.exeファイルを開きます。
- 次に、
rktools.msi
内をrktools.msi
TimeIt.exe
を見つけて、フォルダーに抽出します。
コマンドまたはバッチファイルを実行し、その合計実行時間を測定するための例をいくつか示します。
timeit.exe ping google.com
timeit.exe C:\ Batch Files \ Measureコマンドrun time \ backup.bat
TimeItは、プロセスの終了時間と経過時間などの詳細を示しました。 チェックしたところ、 書き込んだバイト数と出力ファイルのサイズが一致していませんでした。 ただし、バイトの読み取り/書き込み情報については、この記事では説明しません。
詳しくは
FFmpeg.exeを使用してビデオファイルからオーディオを抽出することに関する記事を書くとき、コマンドの実行時間を測定することを考えました。 上記のスクリプトを使用して、FFmpeg.exeコマンドラインツールを使用して、ムービーファイルからMP3オーディオを抽出するのにかかる時間を測定しました。
最初のバッチには、次のコマンドラインが含まれています。
ffmpeg -i "C:\ Movies \ Movie.mp4" -ss 01:20:00 -t 00:00:20 -codec:a libmp3lame -ab 128000 "D:\ output-1.mp3"
2番目のバッチには、次のコマンドラインが含まれています。
ffmpeg -ss 01:20:00 -i "C:\ Movies \ Movie.mp4" -t 00:00:20 -codec:a libmp3lame -ab 128000 "D:\ output-2.mp3"
ご覧のとおり、コマンドライン引数の数とそれぞれの値はまったく同じです。 唯一の違いは、2番目のバッチファイルで、 -ss
(開始点)パラメーターが-i
(ファイル入力)パラメーターの前に配置されることです。 このメソッドは、FFmpeg.exeのドキュメントに従って入力シークと呼ばれています。 1つ目の方法は出力シークと呼ばれ、 -i
(入力ファイル)パラメータが-ss
パラメータの前に表示されます。
- FFmpegのドキュメントには、入力シーク方法は出力シークよりもはるかに高速であると記載されています。これは、前者の方法を使用すると、FFmpeg.exeが入力ファイルの前述の開始ポイントに直接ジャンプ(シーク)し、そのポイントからデコードを開始するためです。
- 一方、出力シークメソッドは最初にファイルを開き、
01:20:00
からデコードを開始し、次に-ss
開始点01:20:00
達するまでデータを破棄します。 したがって、システムリソース(CPU、メモリ、ディスクI / O)が無駄になるだけでなく、出力シーク方法を使用すると実行時間が長くなります。
FFmpeg.exeのドキュメントは正しいです。 テストしたところ、入力シークは出力シークメソッドよりもはるかに高速に実行されました。
- 最初のコマンド(出力シーク)が完了するまでに20.48秒かかりました。
- 2番目のコマンド(入力シーク)の完了には16.62秒かかりました。
プロセス、スクリプト、またはコマンドの実行時間を測定する他の方法を知っている場合は、知らせてください。