・ネイティブコードコンパイルで「ひとまとめ」のスピードが9倍アップ!2007/11/16 17:00

ある日VB6のヘルプを眺めていると、実行ファイルを作るときにスピード重視で最適化するオプションがあるとか、ネイティブコードにコンパイルできるとか書いてあるのに気がついた。

はて?そんなオプションあったっけ?だってそのオプションタブがあるっていうのは、バージョン入れるときはいつも開くダイアログだよ?と思いつつヘルプに書いてあるダイアログを表示してみたのだが、そのオプションが選べないようになっているとかじゃなくて、あるはずのタブ自体が存在しない。

いろいろ考えて思い当たったのは、当初酢こんぶが使っていたのは"Learning Edition"という、価格は安いけど機能が限定されているものだったことだ。その後フルスペックのVBやVC++を含んだ"Visual Studio 6.0 Enterprise Edition"を使えることになってVB以外を新規インストールしたのだが、わざわざVBをインストールしなおすのは面倒だからいいやと思ってインストールしなかった。つまりヘルプに書いてあった機能は安物VBでは使えない(~_^;のではなかろうかと。

早速VBをアンインストールしてから改めてインストールしてみると、思ったとおり今までなかったタブが現れた。

さてめでたく新しいオプションが使えるようになったわけだが、これらで何ができるかというと、、、

(1)スピード重視で最適化

サイズは大きくなるけど実行スピードが速くなるらしい。この他にサイズ重視で最適化とか、いろいろなチェックを省いて高速化するオプションとかがある。

(2)ネイティブコードコンパイル

VBはインタープリタなので、コードを順次読み込みながら実行するわけだが読んだコードをその都度ネイティブコード(マシン語)に変換しているので遅い。実際はソースをp-codeという中間コードに置き換えているので少しは速くなるが、最初からマシン語になっているコンパイラよりはずっと遅い。それがVB5からマシン語にコンパイルできる機能がついたらしい。これを使うと繰り返し処理や算術演算が速くなると書いてある。


「ひとまとめ」の処理は基本的にファイル操作なのであまり高速化されないと思ったのだが、唯一CRC32計算の部分だけは算術演算を繰り返しているので高速化が期待できる。

で、(1)と(2)を適用して474MBのファイルのCRC32計算を2回行うという処理をしてみると、

オプション無し:20分弱
オプション有り:2分

という結果で、9倍以上のスピードアップが実現した。

あまりCRC32計算は使わないので恩恵は少ないけど、何の苦労もせずに実行が速くなったのだから特に文句はない。サイズが50KBから100KBに増えたのも気にならない範囲だ。

その後ネット検索してみて、

p-codeとネイティブコードではイベントの発生する順序が入れ替わったりすることがあるので、デバッグはネイティブコードで行う必要がある

という情報を得たが、「ひとまとめ」の場合はそんなシビアなタイミングで動いてないので大丈夫だろうということで、今後はネイティブコードで行くことに決定!

それにしても酢こんぶがずっと、

「VB6のソースをマシン語にコンパイルできればいいのに。
 X-BASICはBASICソースをCに変換してコンパイルできたぞ!
 マイクロソフトはたるんどる!!」

なんてことを思っていたのは絶対秘密だ。(-_-; ああ、恥かしい、、、。

------------------------------------------
このブログの本店「木全屋かるた堂」もよろしくです。

・ファーストガンダムのかるた売ってます。
・ファイル整理に便利な自作ツール置いてます。
・写真(コスプレ、ポートレート、動物)公開してます。
------------------------------------------

コメント

_ 木全直弘 ― 2007/11/17 13:06

> 9倍以上のスピードアップ

 なんと! 3倍のさらに3倍!

 一気にシャアを超えましたな。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
このブログはxxの思考錯誤日記です。
xxの部分をお答えください。

コメント:

トラックバック

このエントリのトラックバックURL: http://karutadou.asablo.jp/blog/2007/11/16/2392782/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。