私は cisco スイッチをリモート コントロールするための telnet スクリプトを作成しました。開始するのに約 2 ~ 3 分かかります。単一の proc で短いスクリプトを作成しても、開始するのに 2 ~ 3 分かかります。手順は以下の通りです。
proc test_proc {} { 「123」を入れます } test_procこのうるさい問題に直面した人はいますか?
あなたの助けを楽しみにしています...
一部の Tcl コードの実行にかかる時間を調べるには、time
コマンドを使用します。最初の引数は、測定するスクリプトです。(また、使用する反復回数であるオプションの 2 番目の引数を取ります。デフォルトは 1 ですが、反復回数を増やすと、高速実行のものを測定するのに役立ちます。)
proc test_proc {} {
puts "123"
}
puts [time {
test_proc
}]
# I got "48 microseconds per iteration" when I tried it; YMMV...
プロシージャー定義を測定してもほとんど意味がないことに注意してください (それ自体の動作に非常に興味がある場合を除きますが、proc
それはかなりオタクです)。
と呼ばれる Unix システム コマンドもありますtime
。これは (概念的には) 同様に機能しますが、プログラムの実行時間を測定します。その出力は、システムによってかなり異なる場合があります。結局のところ、人間が読めるようにすることを本当に意図しています。
はるかに懸念されるのは、単純なスクリプトの開始にかかる時間です。コンピューティング用語では、2 ~ 3 分が絶対的な年齢です。実行しているマシンのメモリが不足していますか? (ページングが重いと、プログラムの速度が大幅に低下する可能性があります。) または、すべてのライブラリが奇妙な場所にインストールされている可能性があります (Tcl のパッケージの読み込みは/usr/lib
、ディレクトリ構造のサイズが原因で、ライブラリがインストールされている場合に特に問題が発生しやすくなります)。Tcl のいくつかのバージョン (現在のものはありません) には、ファイル名の解析とキャッシュに重大なバグがあり、起動時にパフォーマンスが大幅に低下する傾向がありました。使用している Tcl (および Expect も) の正確なバージョンは何ですか? コマンドinfo patchlevel
(tcl version
Tcl 8.5 以降で十分な精度しかありません)。
これは古いと思いますが、答えを探しているときに偶然見つけたので、次につまずくためにここに投稿すると思いました.
提案された時間関数は機能しますが、完全なスクリプトではなく、関数でのみ機能します。
実行時間を測定するために使用するミリ秒で時計時間を使用する方法を見つけました(秒は不正確です)
set start [clock clicks -milliseconds]
# all your code
set end [clock clicks -milliseconds]
set runtime [expr {$end - $start}]
puts "Runtime ${runtime}ms"