2012-02-20 26 views
1

私のVB6プログラムは現在6MBの実行可能ファイルにコンパイルされています。今日のマシンではこれが実際に問題ではないと思いますが、私はそれをメガバイト以下に減らしたいと思います。VB6コンパイル済み実行ファイルのサイズを減らすには?

これを行うにはどうすればよいでしょうか?

注:私はすでに、「小規模コード用に最適化する」を実行しようとしました。これは実際にEXEを16MBに増やしました!

解決策がいくつかのコードを別々のDLLに分割する場合は、これを行うにはどうすればよいでしょうか?すべてのフォームをEXEに残して、すべてのクラスとモジュールをDLLに入れる必要がありますか? EXEが非常に大きな原因となっていることをどのようにして知ることができますか?

+1

私はサイズについて心配しません。プロジェクトをより管理しやすくするために、コードをDLLに分割することは良いアイデアです。各チャンクを特定のサイズにするのではなく、論理的に自己完結したチャンクに分割します。 – MarkJ

+0

EXEで6MBが大きすぎるとは思わない? –

+0

個人的に私はサイズについて心配しません。それは実際に問題を引き起こしていますか?ディスク容量、ダウンロード時間などを問わず、6メガバイトは大したものではありません。しかし、コードを分割して管理しやすくすることもできます。 – MarkJ

答えて

0

新しいコードを書く場合は、実際にVB.Net用に書かなければなりません。

VB6以上のVB6Net(明らかに「VB6はサポートされていません」)の多くの利点の1つは、.Netランタイムに組み込まれたすぐに使用できるコードの大規模なセットですこれに対応して小さい.exe)。

大きなexeファイルの原因になる可能性のあるものは、たくさんのビットマップを使用しています。それが原因であるかどうかを知りたいかもしれません。そうであれば、代わりに実行時にイメージをロードするだけで、ファイルサイズが大幅に縮小されます。

+0

VB6は継続的に開発されているわけではありませんが、Win8でもVB6のアプリケーションをサポートするとMSは言いました。 –

+0

正確性のために:VB6 IDEはこれ以上サポートされませんが、VB6ランタイムは完全にサポートされています。詳細と参考文献については、[VB6 tag wiki](http://stackoverflow.com/tags/vb6/info)を参照してください。さらに、exeがすでに6メガバイトであれば、VB.netの初めから始めて助言するのはちょっと遅いです。 – MarkJ

3

ほとんどの場合、あなたのコードは問題ではない、リソースはあります。たとえば、大きなフォームの画像を何らかのフォームのピクチャボックスコントロールにプッシュしたとします。イメージは圧縮されていないビットマップとして保存され、EXEのサイズに貢献します。それが問題ならば、画像をアプリケーションから外部のJPGに移動します。

もう1つの例は、アプリ内に多数のレポートがあり、各レポートにヘッダー/フッターに会社のロゴがある場合です。ロゴを他の場所で一元化し、ヘルパーメソッドを使用してアクセスします。

+1

私は同じことを言っています。サイズがわからない場合は、プロジェクトフォルダ内の.frxおよび.resファイルのサイズを確認してください。 – stracktracer

0

6MBは、vb6アプリケーションでは大きいようです。 アプリケーションにサウンドリソースや画像リソースがある可能性があります。

イメージの場合は、Photoshopなどのユーティリティを使用してサイズを縮小します。 実行時にイメージを読み込みます。これは、あなたには、より小さいexeを与える必要があります

0

私は、Pコードにコンパイルする必要があります、それはどこかに[作成]タブの高度なオプションにする必要があります。 EXEを700 KBから200 KBに大幅に削減しました。次に、他の人が示唆しているように、イメージ/サウンド/その他のリソース削減を行います。

また、アイコンを確認してください。いくつかのアイコンは最大250KBのPERアイコンを表示できます。複数のアイコンを含む複数のフォームがある場合は、これが合計されます。典型的な現代的なアイコンは約50KBですが、異なる色や表示設定で異なるアイコンの解像度が保存されるため、さらに多くのことがあります。したがって、1つのアイコン.icoファイルには、4つのアイコン画像があり、 (256ビットカラー)と16ビットカラーの場合は4つになり、1つのフォームのために1つの.icoファイルに16〜20個のアイコン画像が表示されることがあります。一連のgif画像の静的写真のようなアイコン画像を削除することができます。フレームごとに削除することもできます(この場合icon picでアイコン画像を削除することもできます)。16ビットと256ビットのカラーオプションも削除できます。

次の推奨事項として、#IFディレクティブを使用して、アプリケーションに含まれていないユーザー(エンドユーザーが必要としない文字列)および/エンドユーザーには必要ないテスト/デバッグやレポート作成に使用する追加機能#IFディレクティブを使用してこのすべてを削除することができます。 #IFディレクティブ(条件付きコンパイル引数)は、プロパティウィンドウで定数ブール値を設定することでワンショットでオン/オフにすることができます。詳細については、こちらの記事の#IFディレクティブとファイルサイズを参照してください:When I use Conditional Compilation Arguments to Exclude Code, why doesn't VB6 EXE file size change?(また、#IF IFEN #ELSE #END IFディレクティブを使用して条件付きコンパイルを行う方法を記述した多数の素晴らしいStackOverflowの投稿があります。

最後に、pコードのコンパイルだけで3〜4倍のファイルサイズを縮小した後は、適切なEXEコンプレッサを使用してさらに3〜4倍減らすことができます。だから、pコードとexe圧縮を使用するだけで、6MBのファイルを600KB以下にすることができます(#IF指令、アイコンファイル、その他の画像/音源に関する他の最適化を行わなくても)。 pコードのコンパイルは圧縮に関連するものではないため、exe圧縮を追加することで、.exe拡張子を失うことなくファイルサイズを大幅に縮小できます。良いコンプレッサーを使用することによって、私はそれを.zipファイルまたは.rarファイルなどに変更することを話しているわけではありません。圧縮後、圧縮されている間も.exeのままで、人々はそれを実行して差異に気づかずに通常通り使用することができるので、exeが実行されると直ちにメモリ内の圧縮を解除し、フライ、アプリケーションを閉じると、何も変わりません(ファイルサイズは同じですが、小さい&圧縮されています)。 PECompact GUIのバージョンは良いオプションです、いくつかのtorrentのサイズで利用できるかもしれません+これを行うプログラムのいくつかの無料オプション。

要約すると、VB6 make tabsのadvanced/compilationセクションからp-codeコンパイルを行い、違いを見てください。次に、それぞれの最適化を行い、再コンパイルしてファイルサイズの違いに注目し、それぞれの変更の影響がどのような影響を及ぼすかを知ることができます。すべてのオプションを試してみるまで繰り返します。最も大きな違いは、pコードのコンパイルとexe圧縮から来るでしょう。もちろん、pコード&の圧縮オプションの後に、pコード&の圧縮が最も簡単で、ファイルサイズを元のサイズの10%(10x差を合わせたもの)。

最後に、どのように進んでいるのか教えてください。私は今、それがどのように判明したのか不思議です。また、pコードは視覚的な基本ランタイムを持つすべての場所/ PC上で実行されるため、実際にはキャッチはありません。彼らは、pコードのコードは通常のコンパイルされたコードよりも少し遅く実行されると言いますが、その差はそれほど目立たないほど小さいです。現在のPCの速度が非常に速いことを考えれば、実行速度の差はVB6が最初に出たときよりも気づきにくい(はるかに無視できる)ので、特にファイルサイズが重要な場合には究極のフリーランチと考えていますあなたへ。

どうすればいいのか、その他のご質問がありましたら教えてください。乾杯。

0

このコンプレッサーを試してみてください:UPXそれは自由で速いです。

関連する問題