- ベストアンサー
かなり細かい時間の取得
現在、CGIがおそいな~とおもって、 どこが遅いのかをチェックするために、 timeをつかって、現在の秒をprintで表示しているのですが、timeが1秒の位までしか出さないので、 細かいのをループさせているため、どこが遅いか確認できていません。 実行時間を0.1秒単位、できれば0.001秒単位で確認する方法はないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
参考URLによると,Time::HiResモジュールのtime()関数というのがあるようです。 またどこが遅いかを調べるのであれば,Perl Profiler (Devel::DProfモジュール)の利用を検討してみてはどうでしょうか? 下のURLに使い方が載ってます。このページにはCPANから取ってくる必要があると書かれてますが,man perldebug すると,最近のディストリビューションには標準でふくまれてるようです。 http://yuri.sakura.ne.jp/~propella/tips/Devel_DProf.html
その他の回答 (1)
- tatsu99
- ベストアンサー率52% (391/751)
UNIX(LINUX含む)上でPerlが動作することが前提です。 以下の様にして下さい。 --------------------------------- require 'sys/syscall.ph'; sub gettimeofday { my $tv = pack('LL', ()); syscall( &SYS_gettimeofday, $tv, 0) != -1 or return undef; unpack('LL', $tv); } printf "%d.%06d\n", &gettimeofday; -------------------------------------- 得られた結果は、1970年1月1日からの 経過秒数(整数部)及びマイクロ秒(小数部) になります。 windowsでは未確認です。 gettimeofdayはUNIXのシステムコールです。 man gettimeofdayでgettimeofdayの詳細が表示されます。
お礼
ご回答ありがとうございます。 これなんですが、 require 'sys/syscall.ph'; で落ちるようで、よくわかりません... h2ph使うのめんどくさがってやってないだけという説ですが...。 ごめんなさい... ご回答ありがとうございました。
お礼
ご回答ありがとうございます。 ここに質問した後にDProfについてのページを見つけて、それで実際やってみました。 で、早速0.4秒の速度改善になりました。 Time::HiResモジュールがインストールされてない環境で今やっていて、勝手に入れるのはちょっと...という感じです。 ありがとうございました。