発言者: なず
発言日: 2003 02/11 04:09
> 調べ方は、Perlで実際に動かして時間を測ってみることです。(笑)
> 例えば、
> ・perl -we "$a=time; foreach(1..10000000){/abc/} print time-$a,qq|\n|;"
> ・perl -we "$a=time; foreach(1..10000000){index(qq|abc|,$_)} print time-$a,qq|\n|;"
> を比べると時間に差が出ていることが分かります。(速いCPUだともっとループ回数を増やさないと差が分からないかもしれません)
> 逆にいうとこれだけのループがないと差がでないのでそんなに負荷の差がないとも言えます。(これを重要と見るかどうかです。)
> また、置き換える場合も正規表現が必要な場合は//を使用してそれ以外はindexに変更するという選り分けが必要となります。
ふむふむ、実際にテストソースを作って比較、ってことですね。
色々自分で試して計測してみるなりしないとだめですね(^^;
> 負荷軽減のアドバイスですか・・・。
> それでは一例を。
> メイン処理の分岐、
> if($Fm{'mode'} eq '〜'){〜}
> if($Fm{'mode'} eq '〜'){〜}
> if($Fm{'mode'} eq '〜'){〜}
> # 〜
> を、
> if($Fm{'mode'} eq '〜'){〜}
> elsif($Fm{'mode'} eq '〜'){〜}
> elsif($Fm{'mode'} eq '〜'){〜}
> # 〜
> else{&error('無効なモードです');}
> とelsifを使用して全体的な判定回数を減らす、というのがあります。
> この注意点として、デフォルトではlistが2つあるのでそれを順番を変えずに1つにまとめないといけません。
これは一部だけをelsifにしてもかわってくるもんでしょうか?
例えば、そのうちのいくつか(探索場所を増やしているのでそういったまず「一度にどれか」しか使わない類)をelsifにしたりして、自信のないところはそのままというかw
if($Fm{'mode'} eq '〜'){〜} と20こ並んでいたとして、そのうちの半数を修正してやるだけでもやはり軽減につながるものなのかなぁ?と。
数が多ければその分処理軽減につながる、とみていいんでしょうか?
リスト部分を2つ順番に1つにする、というのがちょっとパっとできなさそうでして(^^;
無理ない程度で少しずつelsif化していく、って形が私には実現可能な範囲かと思ったもので。
▼関連発言
│
└◆341:SoSというよりPerlの事かな? [なず] 02/10 00:54
└◆342:Re:SoSというよりPerlの事かな? [moon] 02/10 09:07
└◆345:Re[2]:SoSというよりPerlの事かな? [なず] 02/11 04:09
└◆346:Re[3]:SoSというよりPerlの事かな? [moon] 02/11 11:57
└◆347:Re[4]:SoSというよりPerlの事かな? [なず] 02/11 23:53
└◆348:Re[5]:SoSというよりPerlの事かな? [moon] 02/12 00:45
└◆349:Re[6]:SoSというよりPerlの事かな? [なず] 02/12 23:58
└◆350:Re[7]:SoSというよりPerlの事かな? [moon] 02/13 00:41
└◆351:Re[8]:SoSというよりPerlの事かな? [なず] 02/13 05:51<-last