procがあり、procがいくつかのステートメントと関数呼び出しで構成されているとします。関数がこれまでにどれくらいの時間を要したかをどうやって知ることができますか?
4 に答える
非常に大雑把な例は次のようになります。
set TIME_start [clock clicks -milliseconds]
...do something...
set TIME_taken [expr [clock clicks -milliseconds] - $TIME_start]
time procを使用すると、次のことができます。
% set tt [time {set x [expr 23 * 34]}]
38 microseconds per iteration
コードにかかった時間を測定するには、time
またはを使用しますclock
。
このtime
コマンドは、スクリプト引数を実行し、スクリプトにかかった時間の説明をミリ秒単位で返します(さらに、説明テキストを返します。これは、簡単に切り取ることができますlindex
)。実際にパフォーマンス分析作業を行っている場合は、スクリプトを繰り返し実行するオプションのcount引数を指定できますが、一般的な監視の場合は無視できます。
このclock
コマンドを使用すると、さまざまな種類のタイムスタンプを取得できます(また、時間によるフォーマット、解析、および算術演算も実行できます)。最も粗いのはclock seconds
、で取得されます。これは、Unixエポックの開始からの時間を返します(常用時で計算された秒数で、特別なことをしているのでない限り、これが必要です)。詳細が必要な場合は、clock milliseconds
またはを使用する必要がありますclock microseconds
。もありますが、通常、カウントする単位は定義されていません(またはオプションclock clicks
を渡さない限り)。タイムスタンプを自分にとって便利なものに変えるのはあなた次第です。-milliseconds
-microseconds
Tcl 8.4(またはそれ以前!)でタイミングを調整している場合はtime
、clock seconds
またはを使用するように制限されます(オプションがない場合clock clicks
でも、 8.4ではマイクロ秒解像度のタイマーは公開されていません)。-microseconds
その場合は、一般的に高速であるため、8.5へのアップグレードを検討する必要があります。速いのは良いことです!(8.4より前のバージョンを使用している場合は、サポートの面で大幅に遅れているため、必ずアップグレードしてください。)
関数にかかった時間を知るには、time
コマンド(関数呼び出しをラップアラウンド)を使用clock clicks
するか、関数の前と関数中の現在の時刻を取得するために使用できます。オプションは単純ですが、time
関数全体の時間を計測することしかできません(そして、関数が戻るときだけ時間を与えます)。使用clock clicks
は数回行うことができますが、開始時刻から現在の時刻を自分で差し引く必要があります。
ある種のプロファイラーを本当に探している場合は、Tcllibのプロファイラーパッケージをご覧ください:http: //tcllib.sourceforge.net/doc/profiler.html