Navigation Log - なびろぐ -
1999/09/17

...X680x0 spirit inside...

この日記はGNSで生成しています。
この日記の画像はOPTPiX webDesigner Ver.4で生成しています。

hauN
Go amazon.co.jp

■ご注文リストから■ [一覧]
■Amazonギフト券■ [購入]
ゆゆ式 8巻 []
ゆゆ式 8巻
Amazonほしい物リスト


1999/09/17 (金) 曇時々雨

Perlべんち

_ 地味な高速化の実験。


local(@tm);
local(@tm2);
local($i);
local($a);

@tm = localtime(time);
@tm2 = @tm;
while ( $tm[0] == $tm2[0] ) {
  @tm2 = localtime(time);
}

$i = 0;
@tm = @tm2;
while ( $tm[0] == $tm2[0] ) {
  @tm2 = localtime(time);
  $a = &datefmt( *tm2, "%m/%d %H:%M:%S" );
  $i++;
}
print "datefmt: $i $a\n";

$i = 0;
@tm = @tm2;
while ( $tm[0] == $tm2[0] ) {
  @tm2 = localtime(time);
  $a = &datefmt2( *tm2, "%m/%d %H:%M:%S" );
  $i++;
}
print "datefmt2: $i $a\n";

sub datefmt {
  local(*a, $fmt) = @_;
  local %var;

  $var{'m'} = sprintf("%02d", $a[4] + 1);
  $var{'d'} = sprintf("%02d", $a[3]);
  $var{'H'} = sprintf("%02d", $a[2]);
  $var{'M'} = sprintf("%02d", $a[1]);
  $var{'S'} = sprintf("%02d", $a[0]);
  $var{'%'} = "%";

  $fmt =~ s/\%([mdHMS%])/$var{$1}/g;
  $fmt;
}

sub datefmt2 {
  local(*a, $fmt) = @_;
  local($r);

  $r = sprintf("%02d", $a[4] + 1); $fmt =~ s/\%m/$r/g;
  $r = sprintf("%02d", $a[3]);     $fmt =~ s/\%d/$r/g;
  $r = sprintf("%02d", $a[2]);     $fmt =~ s/\%H/$r/g;
  $r = sprintf("%02d", $a[1]);     $fmt =~ s/\%M/$r/g;
  $r = sprintf("%02d", $a[0]);     $fmt =~ s/\%S/$r/g;
  $fmt;
}

_ P2-450なNT4.0で5.003_07を動かして、datefmt=7078、datefmt2=9160(実行毎に±200くらい上下がある)と出ました。これは1秒あたりのループ実行回数となるので、速いほど大きい数値となります。置換回数を減らすことが必ずしも高速化につながらないという例・・・ということでいいでしょうか。

_ 数値に出ない差として、「datefmt2のほうが置換項目が増減したときの変更行数が少ない」というものがあります。debugが楽になるわけで、ある意味ベンチ結果以上に大切にしなければいけないことです。

_ どんな環境でどれくらいの値が出るか、見てみるのもおもしろそうですな・・・それっ。

datefmt = datefmt2 = CPU : CLOCK : OS : Perl ver. :

_ ・・・って、よく読んだら「遅いんで静的パターンを生成する方法を研究中」という話じゃないか・・・早とちり^^;。


[URL] [View Log()] [Trackback]
Name: Comment:



メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]

「表紙へ戻る」
「会議室」 「最新版」 「なびろぐindex」 「GNSソースを読む」