- PR -

VB.VETで、処理速度を早くしたいのですが

投稿者投稿内容
くまのぷーさん
常連さん
会議室デビュー日: 2003/12/18
投稿数: 34
投稿日時: 2003-12-22 13:21
VB.NET初心者で、VBA(主にEXCEL)から.NETへの移行を行っています。

そもそもVBAからの移行の動機が、VB.NETの方が早い、ということでした。
単純にVBAのプログラムをVB.NETに移行したら、処理時間が40%減でした。
元データが大量なので、出来ればもう少し早く(70%減くらい)なればと
思っています。プログラムの内容としては、

ADOでSQLServerから元データを読み込み、通常のVBAでエクセルから処理用
のデータを読み込み、後はひたすら手続型のプログラムで処理をこなして、
テキストファイルとエクセルファイルに結果を出す、というものです。
処理で多いのは、

for i=1 to 100
for j = 1 to 12
a(i,j)=a(i,j)+b(1,j)*c(i,J)
next
next

というループで、このaという変数は100くらいあります。
VBAではすべて標準モジュールを使っており、クラスモジュールは使ったことがありません。

処理速度を上げる方法、または、このようなプログラムを効率的にする方法、
参考書などをご存知の方はお教えいただけないでしょうか。

七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2003-12-22 13:30
.NETでのプログラミングはできるのでしょうか。
それを教えてくれないと、プログラムを効率的にする方法、とかいわれても
困るのだが...
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-22 13:37
引用:

くまのぷーさんさんの書き込み (2003-12-22 13:21) より:
処理で多いのは、

for i=1 to 100
for j = 1 to 12
a(i,j)=a(i,j)+b(1,j)*c(i,J)
next
next


 .NETでは、配列は0から始まって、Count - 1までですので、ご注意。

Dim array(100) as String
と宣言したら、使えるのはarray(0)〜array(99)
for cnt = 0 to array.length - 1
next
くまのぷーさん
常連さん
会議室デビュー日: 2003/12/18
投稿数: 34
投稿日時: 2003-12-22 14:13
引用:--------------------------------------------------------------------------
七味唐辛子さん(2003-12-22 13:30)
.NETでのプログラミングはできるのでしょうか。
それを教えてくれないと、プログラムを効率的にする方法、とかいわれても
困るのだが...
--------------------------------------------------------------------------
なにせ初心者なので 「.NETでのプログラミングはできる」という意味が・・・
できることは、前の書き込みに書いたような内容のプルグラムを、そのまま.NET
のプログラムに移行した、というくらいでしょうか。

VB.NETの初心者向けの本は結構読みましたので、書いてあることは理解できます。
ただ、それを自分のプログラムにどう適用すると効率的になるかが、わからない
でいます。
m.ku
大ベテラン
会議室デビュー日: 2002/09/15
投稿数: 184
投稿日時: 2003-12-22 17:53
プロファイリングでもしてみては?
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-12-22 23:16
引用:

Jittaさんの書き込み (2003-12-22 13:37) より:
 .NETでは、配列は0から始まって、Count - 1までですので、ご注意。

Dim array(100) as String
と宣言したら、使えるのはarray(0)〜array(99)
for cnt = 0 to array.length - 1
next


C#ではそうなんですが、VB.NETでは0〜100だったりするんですね〜
うーん実に混乱の元な気がする。
# まあ、元々BASIC系はこうなので仕方ないですが。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-22 23:32
引用:

なちゃさんの書き込み (2003-12-22 23:16) より:

C#ではそうなんですが、VB.NETでは0〜100だったりするんですね〜
うーん実に混乱の元な気がする。
# まあ、元々BASIC系はこうなので仕方ないですが。


 これって、β1で「0-99」、β2で「1-100」と、2転3転していませんでしたっけ?いや、どこかのニュース記事を読んだだけですが。。。「Option Base」の扱いをどうとかこうとか。
#とりあえず、Cに倣って?「0〜99」で使っているので、
#余分なメモリが確保されているということ以上の害はないので良しにしておこう
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2003-12-23 12:41
引用:

処理速度を上げる方法、または、このようなプログラムを効率的にする方法、
参考書などをご存知の方はお教えいただけないでしょうか。



 VBで時間の掛かる行列計算は、C/C++で処理関数をDLLに記述し、VBから
その関数を行列の参照渡しで呼び出す方法が考えられます。
少し"unmanaged"になりますが...

スキルアップ/キャリアアップ(JOB@IT)