ミカコさんの質問を見ていて、便乗ですが私もアドバイスを頂きたいのですが、
以下の内容のコードでなるべく速度の速いコードはどういったかんじに
なるのでしょうか?
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;
設計段階で、考えられる速度アップは、
・ファイル読みとりの短縮
・計算処理の短縮
です。
ちょっとすぐにはかけませんが、説明を見る限り冗長なのは
1.1行ずつ読み込み、処理している
2.文字列から小数に変換し、それをさらに整数に変換している
です。
1.できる限りメモリに読み込む。
2.1000倍する処理を、小数点を無くす(小数位置以降、3文字を1文字左にシフトする)処理に変える
で、短縮できるような気がします。
# 2に関しては、やってみないと何とも言えませんが、自分の経験則です
あとは、ハードウェアに依存しますが、複数タスクに分けていっぺんに処理させるという手もあります。各行は、それぞれに依存しないデータなので、各行を同時に処理させることができるはずです。CPUが2つあれば、2つの並行処理で約2倍の速度アップになります。
これだけの情報では、具体的処理内容がわからないので、
なかなか答えようがないのですが、
どのくらいのデータ量なのかにもよっても、対策はかわってくるし、
保存データ形式が決まってないのなら、それを工夫することで、
速度アップも可能ですし(例えば、固定長データにするとか)、
その辺の仕様や情報をもう少し詳しく提供してもらえると、
的確な回答も得られやすいと思います。
とりあえず速度アップを考える場合、まずは、どの処理に時間が
かかっているかの把握から取りかかるのが効率的でしょう。
たとえは、全体の処理時間のうち、10%の処理を、10倍高速化して
も、全体では、9%の時間短縮にしかなりませんが、80%の処理を
2倍高速化できたら、40%の短縮になります。