VB6での実行EXEとプログラム上での動作の違い


yu  2006-12-18 20:51:26  No: 134641

お世話になります。yuと申します。

今現在とある会社でEOS取引の伝票処理ソフトを作成し実務で使用しています。
作成当初の頃は処理的に時間がかからなかった処理が、最近になって急に10倍近い処理時間がかかってしまっています。

状況として
印刷物の発行時にのみ、Windowsのcsrss.exeというプロセスがCPU占有率を常に50%近く占めていて処理が間に合っていないようです。

システムの内容としては
データベースから任意の取引を抜き出しExcelに書き出してから印刷をかけるという単純な構造なのですが、実行化した段階では上記のような状況になってしまうのに対し、開発段階ではすんなりと処理されます。
開発段階の内容も実行ファイル化されたファイルの内容もまったくの同一内容です。
ですので開発段階でいくらエラーを探そうとも実行ファイル化した段階で出てしまうので手がつけられません。

何かよい解決方法がありまhしたらお願いします。

開発環境は以下のようになっています。

WindowsXP HomeEdition
VisualBasic 6.0 SP5
Microsoft Access2000
Microsoft Excel2000

印刷する際の処理

CreateObject("Excel.Application")した後に
各セルに書き込みをし、印刷しています。
Excelは画面表示させていません。また確実にオブジェクトを開放しているのでプロセス上にはExcelは残っていません。

つたない文章で申し訳ないのですが、よろしくお願いします。


我龍院  2006-12-18 22:48:12  No: 134642

P-Codeコンパイルしても同じですか?


魔界の仮面弁士  2006-12-18 22:53:56  No: 134643

> 実行化した段階
『実行化』とは、どのような処理の事でしょうか?

開発環境からの実行と、exeとしての実行の差の事を指しているのであれば、
コンパイルオプションを、(標準の)ネイティブコードではなく、P-Codeに
変更してみてください。開発環境での実行に近い状態になります。

> WindowsXP HomeEdition
最低でも Service Pack 1、可能であれば Service Pack 2 の適用を
お奨めします。

> VisualBasic 6.0 SP5
XP で動作させるなら、Service Pack 6 にしておきましょう。

> Excelは画面表示させていません。
非表示にすると、アプリがバックグラウンド動作になってしまい、処理の
優先順位が下がってしまいます。本体は表示させ、ScreenUpdating や
Interactive などによって、画面描画とユーザ操作を除外してやった方が、
結果として、処理が高速になる場合もあるようです。


yu  2006-12-19 00:28:51  No: 134644

さっそくの回答ありがとうございます。

>我龍院さま

P-Codeというコンパイル方法をいまさらながらに学びました。

というのも今開発している環境がVB6.0 LearningEditionで
どうやらおっしゃっているP-Codeコンパイル・ネイティブコードコンパイルの
設定切り替えがどうやらないようです。
一度 VB6.0 Professionalを購入し検証してみようと思います。

>魔界の仮面弁士さま

言葉が足りず混乱されたかと思いますが
実行化とはおっしゃるとおりexeとしての実行を指しています。

Excelを非表示する事で処理の優先順位が下がるとは思ってもみませんでした。
目から鱗が落ちた思いです。
一度その方法で試してみようと思います。

他にも色々とご指導いただいて恐縮です。

早速試してみようと思います。
結果のほうはまたお知らせします。
ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加