Visual Basic 6.0を使用しています。
今、Fortranで完成しているプログラムをVBに書き換える作業をしています。
このプログラムには、繰り返し計算が多く存在し、サブルーチンも5個ぐらいあります。中には、繰り返し計算の中に、サブルーチンもあります。
書き換えて実行してみたのですが、実行時間がFortranの何倍もかかってしまいます。VBの方がFortranより計算速度が遅いのでしょうか?
また、サブルーチンの扱い方もいまいちわからないので教えてください。
よろしくお願いします。
確かに、計算処理はFortranの方が得意とする分野ではありますが、
VBのコーディングに問題があるために遅くなっている可能性もありえます。
(例えば、効率の悪い変数の使い方をしていたりとか)
具体的に、どのようなコードを書いているのかわからないと何とも言えませんが、
適切なコードが書かれていれば、VBでもそれなりの速度はでるハズですよ。
現在は、どのようなコードを書いていて、どのくらいの時間がかかっていて、
それをどの程度まで短縮させたいのでしょうか?
速度的な問題ですが、
もし、配列を使っていて、その配列のデータが必要なくなった時は開放すると言う方法だけでも処理があがりますよ。
開放されれば、その分メモリが増えますから・・・
例
dim a(1000) as integer
'何かの処理
---
Erase a '配列開放
>dim a(1000) as integer
>'何かの処理
> ---
>Erase a '配列開放
>
固定配列の場合はメモリを開放しません。(初期化されるだけです。)
開放されるのは動的配列の時です。開放するのにも時間がかかるのでどっちがいい
のかは試してみないと。
dim a() as integer
Redim a(1000) '<--動的にメモリを割り当てる。
'何かの処理
---
Erase a '<--メモリを開放
ご返答ありがとうございます。
コード全部載せるには無理があるので、意味があるのかわかりませんが、サブルーチンのところを簡単に載せました。
Private Sub Command1_Click()
・・・・・・・・
Call CENTER
・・・・・・・・
End Sub
-------------------
Private Sub CENTER()
・・・・・・・・
GoSub HANKEI
・・・・・・・・
Exit Sub
-------------------
HANKEI:
・・・・・・・・
For I = 1 To NDR
GoSub SLICE2
Next I
・・・・・・・・
Return
Exit Sub
-------------------
SLICE2:
・・・・・・・・
Return
End Sub
-------------------
また、”クリリンさん”や”うそーんさん”からのご指摘どうり、変数はかなりある方だと思うので、一度やってみます。
GoSubは過去のBasicの遺物なので使わない方が良いです。
別プロシージャを用意してCallして下さい。
ヘルプにはこう書かれています。
GoSub...Return ステートメントを使うよりも、
独立した 1 つのプロシージャ (Sub プロシージャまたはFunction プロシージャ)
を作成して呼び出す方が、より構造化された方法といえます。
あと、VB初心者なら下記のサイトを一読しておくと役に立つと思います。
http://www3.plala.or.jp/sardonyx/smart/
ご返答ありがとうございます。
ご指摘通り直してみます。
解決したようですが・・・
コンパイルオプションをいじると意外と実行速度は変化しますよ。
後は、VBは画面だけに使って計算部分をVC等でDLLにするとか。