- - PR -
ActiveX DLLについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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か違うだけで、 上記処理内容で速度がこれほど異なる理由とは何なのか、 考えられること、試してみること、何でも良いので教えて頂けませんでしょうか? | ||||
|
投稿日時: 2006-11-11 20:54
過去の記憶だと、Access(バージョン 97 の頃か 2000 の頃) は、なにもしない状態でも CPU 使用率が 100% になるなど、なんだかリソースの制御が独特だったと記憶しています(今のバージョンはどうかは知りませんが)。仮説ですが、「Spread」というライブラリーが、レコードデーターを追加されている途中に、随時、自身の表示を更新していて、その頻度が VB 上と Access 上でことなるのかもしれません。「Spread」に表示の随時更新を抑制するようなモードがあるかどうかを調べられてはどうでしょうか。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||
|
投稿日時: 2006-11-12 00:04
ご返信ありがとうございます。
表示を随時更新しないように制御してみたのですが、 処理速度の結果は変わりませんでした。 ただ、VBの場合データセット中はCPU負荷が40%程度だったのに対して、 ACCESSの場合は100%になっていました。 この辺りに何か問題があるのかもしれません。 良いヒントありがとうございました! |
1