• ベストアンサー

かなり細かい時間の取得

現在、CGIがおそいな~とおもって、 どこが遅いのかをチェックするために、 timeをつかって、現在の秒をprintで表示しているのですが、timeが1秒の位までしか出さないので、 細かいのをループさせているため、どこが遅いか確認できていません。 実行時間を0.1秒単位、できれば0.001秒単位で確認する方法はないでしょうか?

  • ron3
  • お礼率65% (53/81)
  • Perl
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • aton
  • ベストアンサー率47% (160/334)
回答No.1

参考URLによると,Time::HiResモジュールのtime()関数というのがあるようです。 またどこが遅いかを調べるのであれば,Perl Profiler (Devel::DProfモジュール)の利用を検討してみてはどうでしょうか? 下のURLに使い方が載ってます。このページにはCPANから取ってくる必要があると書かれてますが,man perldebug すると,最近のディストリビューションには標準でふくまれてるようです。 http://yuri.sakura.ne.jp/~propella/tips/Devel_DProf.html

参考URL:
http://www.developer.be/forums/index.cfm/fuseaction/dsp_full_thread/fullthreadid/573/forumID/5.htm
ron3
質問者

お礼

ご回答ありがとうございます。 ここに質問した後にDProfについてのページを見つけて、それで実際やってみました。 で、早速0.4秒の速度改善になりました。 Time::HiResモジュールがインストールされてない環境で今やっていて、勝手に入れるのはちょっと...という感じです。 ありがとうございました。

その他の回答 (1)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

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の詳細が表示されます。

参考URL:
http://www.onicos.com/staff/iz/amuse/perlTips.html
ron3
質問者

お礼

ご回答ありがとうございます。 これなんですが、 require 'sys/syscall.ph'; で落ちるようで、よくわかりません... h2ph使うのめんどくさがってやってないだけという説ですが...。 ごめんなさい... ご回答ありがとうございました。

関連するQ&A

  • Prologの現在時間の取得

    現在SWI-Prologの勉強をしています. 現在の時間を表示させたいのですが,うまくいきません. 7 ?- get_time(T). T = 1.21413e+009. 9 ?- stamp_date_time(1.21413e+009,D,0). D = date(2008, 6, 22, 10, 20, 0.0, 0, -, -). プログラム実行時の時間は20:03分なのに, 10:20分でずれがあります.しかも,get_time(T)は いつ実行しても同じ結果が出てしまい,現在の時間を表示さ せてくれません(19:40に実行したときも同じ結果). どうすれば現在の時間を表示させることができるでしょうか? ご教授願います.

  • 処理時間の計測中に、任意の時間が経過してしまったら、警告表示を行いたいですが、方法が分からないでいます

    C++で、 ある処理の実行に要する時間の計測を行う ソースを書いていたのですが、 時間の計測を開始してから、 3秒以上が経過してしまった場合にのみ、 処理の進行状況に関わらず、 「3秒経過済み」と表示してあげたいと思っていましたが、 時間の計測を、 「difftime」などで表示する方法は分かったものの、 処理の実行中に、3秒以上経過したら、 取り合えず、「3秒経過済み」と表示させる方法が 分からないでいます。 何かアドバイスいただけるとありがたいです。 宜しくお願い致します。 ====================== time_t start, end; time( &start ); //計測開始 //処理が実行される //処理時間の計測中に「最初の3秒が経過してしまった場合」にのみ「3秒経過済み」と表示してあげたい time( &end );//計測終了 ======================

  • タイマーオブジェクトを利用した時間の取得

    今、卒研でVBを使ってよるのですが、そのプログラミングで悩んでいます。 タイマーを使って時間を取得しようと思い、パソコン画面右下の時間表示から取っているのですが、そうすると時間、分は表示できるのですが秒までは表示できません。 このやり方で秒まで表示できませんか? 違った方法でもVBを使って秒まで表示できるプログラミングがあったら教えてください。 VBを使って10分の1秒単位での時間の取得はできませんか? できたら2つのフォームにまたがって同じタイマーを使用したいのですが、何か方法はありませんか? すみません。 お願いします。

  • リクエストの待ち時間が期待通りになりません。

    リクエストの待ち時間が期待通りになりません。 5秒以内にリクエストが行われた場合は、ループとスリープで待たせて、ログに記録されているタイムから5秒以上経過した時点で、新たにログにタイムを記録させたいと思っています。 複数人で同時アクセスもありますので、ループ内で常に最新のファイルを読み込む必要がある?ので、 以下のように書いてみましたが、5秒以内にリクエストした場合、通常は1秒待てば処理が終わるはずなのですが、ループが途中で終わらずに20秒待たされ、$flag==0のまま終わります。 適当な知識しかなくて恥ずかしいですが、どこか間違えている場所があればご指摘くださると幸いです。 my $logfile = "request.dat"; my $time = time; my $i = 0; my $flag=0; while ($i < 20) { $i++; open(IN, "< $logfile"); my ($request_time) = <IN>; close (IN); if($time < $request_time+5) { sleep(1); } else { $flag=1; last; } } if($flag==0){&error;} else { open(OUT,">$logfile"); print OUT $time; close(OUT); }

    • ベストアンサー
    • Perl
  • Perl 一定時間後にプログラムを実行

    恐れ入ります。 一定時間後にプログラムを実行したいのですが、sleepですと、すべてのプログラムが停止してしまいます。 プログラムの一部を、一定時間後に実行するにはどうしたらよいのか苦戦しています。 $SIG{ALRM} = \&timeout; eval { alarm 5; print qq! 再生中!; alarm 0; }; alarm 0; sub timeout{ print qq!5秒経ちました!; } としてみましたが、うまくいきません。再生中を表示しながら、5秒後に5秒経ちましたと、 再生中を表示しながら表示したいのですが、どのようにしたら良いでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • cgiを使用して時間制限

    CGIを使用して、文字が表示されてから○秒後にタイムアウト、というようなことをしたいのですが、どのようにすればいいのでしょうか?

    • ベストアンサー
    • Perl
  • VideoStudio ProX3写真の表示時間

    VideoStudio ProX3写真の表示時間の設定についてです。 設定→環境設定→編集→写真/カラーの表示 で、表示時間を指定(整数単位のみ指定可)すると、 タイムラインに乗せた写真は、その秒数になったと思うんですが (3秒で指定すると、3秒でタイムラインに乗ったはず) 急に2:29とか、中途半端な数字でしかタイムラインに乗らなくなってしまいました。 カラークリップをタイムラインに持って来た時は、正常に3秒で入ります。 どうやったら元に戻せますでしょうか? 新しいプロジェクトで試したり、古いプロジェクトで試したり…と色々やってみたのですが アンインストールしてしまうと愛用しているDVD Movie Writer7を再ダウンロードできなくなってしまうので(無料配布が終了していますよね?) アンインストールはしたくありません。 元に戻せる方法があったら、またはこうしたら戻るのでは?という方法がありましたら 試したいと思っているので、教えて下さい。

  • タイムカードの記入時間について教えて下さい

    うちの会社では8:00~17:00の勤務です(うち1時間は休憩) 最近タイムカードが導入されたのですが、管理している人間が言うには 「出勤時に8:00なら遅刻」と言います。 つまり7:59とタイムカードに表示しないといけません。 これは理解できるのですが問題は 「退社時は17:01にしろ」と言うのです。 17:00と記入すると駄目と言うのです (15分単位の給料なので17:00だと16:45までしか働いたことにならない) これはおかしくないでしょうか? タイムカードは秒は表示されませんが仮に記入例が07:59から17:00だと 時間数にして8時間01秒~8時間1分59秒となります。 上記の条件ですでに労働時間の8時間は確実に超えています しかし記入例が07:59から17:01だと 時間数にして8時間1分01秒~8時間2分59秒となるとおもうのですが・・・・ どうなのでしょうか?

  • 1/10秒単位で経過時間を測りたい

    Excell VBA で 1/10 秒単位で経過時間を表示する方法を教えてください。 現在は次の書式を使っているので、1秒単位でしか表示されません。 MsgBox "所要時間 : " & Format(Now - StartTime, "hh:mm:ss") StartTime は計測開始時刻です。

  • 単位時間ごとのレコードのカウント

    time ---------------------------- 2006-12-01 00:00:00.323861 2006-12-01 00:00:00.710523 2006-12-01 00:00:00.963864 2006-12-01 00:00:01.45068 2006-12-01 00:00:01.512551 2006-12-01 00:00:02.17493 2006-12-01 00:00:02.731608 2006-12-01 00:00:02.873651 2006-12-01 00:00:03.398863 2006-12-01 00:00:03.438085 2006-12-01 00:00:03.833481 このようなレコードが格納されているテーブルに対して、例えば1秒ごとにレコードを集計してその集計時間と集計数を表示する といったことをどのようなSELECT文を作れば良いのでしょうか? SELECT COUNT (time) FROM table1 where ~ と書いて条件文を一秒ごとに設定した文を何度も繰り返し実行してみたのですが、処理を完了するのにかなり長い時間を要したのでこの方法は断念しました。 短時間でこの処理が行えるような文があったら教えてください。 お願いします。

専門家に質問してみよう