VB6.0で、実行形式プログラムを作成した時、その実行所要時間が、
1.6倍になってしまう、と言うことが発生しました。
<その1>条件
①対象パソコン:WindowsXPサービスパック2:HP−Compaqdc5700
CPU:Pentium(R)Dプロセッサ3.40GHz
②VBオブジェクトのコンパイル条件
P−Codeでも、Nativeコードのどちらの生成でも同じく、 所要時間が1.6倍になり、
Nativeコード時に、何も最適化しなくても、
PentiumPro用に最適化しても、
実行速度優先で最適化した場合も、
コードサイズを最小化した場合も、
デバッグ情報を生成しても生成しなくても、
つまり、どのような条件下で、.exeファイルを生成しても、
VBのまま実行する場合の、1.6倍の実行所要時間となる。
<その2>派生して...
いくつかのlong配列の大きさが3000としてあった時、
.exeを生成すると、プログラムの一部が全く動作せず、
藁をもつかむ気持ちで、この配列サイズを1024としたところ、
正常に動いてしまった。
<その3>質問事項
①何が原因でこのような事が起こるのでしょうか?
素人考えでは、P−Code生成にすると、
処理速度は、VBそのまま実行するのと同じで、
Nativeコード生成にすると、
処理速度が速くなるように思うのですが、
CPUの種類によっては、こんな事も起こるのでしょうか?
long配列のサイズを変えたぐらいで(それも、
ものすごく大きい配列ではない)、動作が変わってしまうのは、
何が原因でしょうか?
②考えられる対策は?
最新版のVB(VB.Net2007?)あたりを導入すれば
解決するでしょうか?
で、実際どんなコード書いてどの部分で1.6倍になってるの?
上の記事を読んでもその部分について書かれていないので誰も回答できないよ。
プログラムの全体を眺めて1.6倍になっていると騒いでも解決しないだろ
うから関数単位、コード単位などで時間を計り時間の掛かっている部位を特
定するのが先じゃないの?
その後で「こんなコード書いてますが、実行環境と開発環境で結構な時間差
が出ています。速度を上げる方法はないですか。」とか質問しないとね。
まぁ、その際に再現可能なサンプルを作ればより多くの人に試してもらえるかも。(DBや市販コントロール等の特殊な環境が必要ないならね。)
名前が中途半端で、すみませんでした。質問者本人の、はじめちゃんです。
GODさんの仰ることは了解しましたが、何故、こんな事が起こるのか不思議な気がして、質問したのです。
たまたま、別のパソコンで、同じプログラムを同じ条件下で動作させる機会に恵まれましたので、追記しておきたいと思います。
Core2 6600の2.4GHzCPUで、同じメモリサイズのもので、試したところ、
ソースコード(開発環境)では、1.4倍処理時間がかかったのに、
EXEプログラム(実行環境)では、PentiumD:3.4GHzのものが、1.6倍になったのに、Core2 6600:2.4GHzでは、
1.5倍にとどまっていました。
Core2 6600:2.4GHzそのもので見ると、ソースコードとEXEプログラムとの処理所要時間は、EXEプログラムで、1.06倍にしかなっておらず、
また、P−CodeタイプのEXEプログラムでは、全く処理所要時間が変わらない、と言う結果が出ました。
このように、CPUの種類によって、開発環境と実行環境で、処理所要時間に、違いが出ることが判りました。
本質的な解決ではありませんが、経過説明とさせて頂きます。
VB6.0で記述したプログラムをVB.NET2005に変換したところ、開発環境(デバッグモード)での処理所要時間と、実行環境(EXEプログラム)での処理所要時間の逆転現象(?)は、無くなりました。
何だか、すっきりしないですが、一応解決しました。
しかし、処理所要時間が一番短かったのは、やはり、3.4GHzのPentiumDプロセッサの場合で、VB6.0のソースコード実行の場合でした。