発言者: moon
発言日: 2003 02/10 09:07
> またもやおじゃまします(^^;
> 月さんの以前のレスの中に、
> 「if($pav eq 'dead' && index($psp,'Re')>=0) の様にindexで検索することで//を使うより負荷軽減 」
> というものがありました。
>
> index自体の意味は調べてわかったのですが、負荷軽減の度合とはどうやって調べるものなのか?という疑問がありまして。
> 比べてみた時にAよりもBの方が良い、となればできるだけ置き換えてみたいとも思いますし。
> 簡単に調べられるものなのかどうか?という点と、もし手軽に調べられないものであれば、上記の例の他に有効的な物があるかどうか?という2つを質問したいのですが、ちょっと具体的な質問でなくてすいません。
>
> 「SoSのソース中で」よく使われている物だと、@@@な部分はこうした方がより良い(軽減等につながる)、というような1例などでも構いません。
> アドバイスやヒントになるものを教えていただけないでしょうか?
> よろしくおねがいします。
調べ方は、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つにまとめないといけません。
▼関連発言
│
└◆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