速度の速いコードはどういったかんじに


しんじ  2002-10-08 02:25:18  No: 1657

ミカコさんの質問を見ていて、便乗ですが私もアドバイスを頂きたいのですが、
以下の内容のコードでなるべく速度の速いコードはどういったかんじに
なるのでしょうか?

while eof(fileload) do
begin
                ;
                ;t1-t7へ格納する処理
                ;
      1行読み込んだ処理の結果が以下のように格納されるとします。  
    t1=C39 t2=1R0EC50 t3=C352 t4=T t5=139.065 t6=63.818 t7=90.0
    これをEOFまで繰り返し、1行読み込まれるたびに
    t1-t3(string型で格納されています)の内容をソートして、t4は'T'、'B'しか
    格納されないので、'T'を優先にソートし、t5,t6は1000倍した値を
    別のファイルに書き込んでいきます。
    
end;


にしの  2002-10-08 08:02:07  No: 1658

設計段階で、考えられる速度アップは、
・ファイル読みとりの短縮
・計算処理の短縮
です。
ちょっとすぐにはかけませんが、説明を見る限り冗長なのは
1.1行ずつ読み込み、処理している
2.文字列から小数に変換し、それをさらに整数に変換している
です。
1.できる限りメモリに読み込む。
2.1000倍する処理を、小数点を無くす(小数位置以降、3文字を1文字左にシフトする)処理に変える
で、短縮できるような気がします。
# 2に関しては、やってみないと何とも言えませんが、自分の経験則です

あとは、ハードウェアに依存しますが、複数タスクに分けていっぺんに処理させるという手もあります。各行は、それぞれに依存しないデータなので、各行を同時に処理させることができるはずです。CPUが2つあれば、2つの並行処理で約2倍の速度アップになります。


hatena  2002-10-09 18:10:47  No: 1659

これだけの情報では、具体的処理内容がわからないので、
なかなか答えようがないのですが、

どのくらいのデータ量なのかにもよっても、対策はかわってくるし、
保存データ形式が決まってないのなら、それを工夫することで、
速度アップも可能ですし(例えば、固定長データにするとか)、
その辺の仕様や情報をもう少し詳しく提供してもらえると、
的確な回答も得られやすいと思います。

とりあえず速度アップを考える場合、まずは、どの処理に時間が
かかっているかの把握から取りかかるのが効率的でしょう。
たとえは、全体の処理時間のうち、10%の処理を、10倍高速化して
も、全体では、9%の時間短縮にしかなりませんが、80%の処理を
2倍高速化できたら、40%の短縮になります。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加