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