- PR -

ActiveX DLLについて

1
投稿者投稿内容
marlboro
会議室デビュー日: 2006/11/11
投稿数: 2
投稿日時: 2006-11-11 18:36
VB6.0でActiveX DLLを作成しているのですが、
そのActiveX DLLは、
呼び元(Access)からプロパティ経由でDBのオブジェクトとSQL文字列を渡し、
DBから取得した結果をSpreadに表示するActiveX DLLになっています。

その時、呼び元がAccessの場合とVB6.0(標準EXE)の場合とで、
Spreadに表示される速度が、DBから取得したデータ件数の多さに比例して
前者のほうが処理速度が遅くなる現象がでています。
Spreadの列数にもよりますが、
データ件数が1000件程度で、前者は5秒、後者は1秒ほどの違いです。

呼び元でループを回したりしているなら理解できるのですが、
呼び元ではパラメータを渡した後、ActiveX DLLのメソッドを1回実行するだけで、
呼び元でループを回したりはしていません。
データセットのループは全てActiveX DLLの中で行なっています。
ActiveX側でのデータセットが完了するまで呼び元は待ち状態としています。

全く同じActiveX DLLのソースで、呼び元がAccessかVBか違うだけで、
上記処理内容で速度がこれほど異なる理由とは何なのか、
考えられること、試してみること、何でも良いので教えて頂けませんでしょうか?
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-11-11 20:54
引用:

marlboroさんの書き込み (2006-11-11 18:36) より:
その時、呼び元がAccessの場合とVB6.0(標準EXE)の場合とで、
Spreadに表示される速度が、DBから取得したデータ件数の多さに比例して
前者のほうが処理速度が遅くなる現象がでています。


過去の記憶だと、Access(バージョン 97 の頃か 2000 の頃) は、なにもしない状態でも CPU 使用率が 100% になるなど、なんだかリソースの制御が独特だったと記憶しています(今のバージョンはどうかは知りませんが)。仮説ですが、「Spread」というライブラリーが、レコードデーターを追加されている途中に、随時、自身の表示を更新していて、その頻度が VB 上と Access 上でことなるのかもしれません。「Spread」に表示の随時更新を抑制するようなモードがあるかどうかを調べられてはどうでしょうか。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
marlboro
会議室デビュー日: 2006/11/11
投稿数: 2
投稿日時: 2006-11-12 00:04
ご返信ありがとうございます。

表示を随時更新しないように制御してみたのですが、
処理速度の結果は変わりませんでした。

ただ、VBの場合データセット中はCPU負荷が40%程度だったのに対して、
ACCESSの場合は100%になっていました。

この辺りに何か問題があるのかもしれません。
良いヒントありがとうございました!
1

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