あっという間に1週間、時間がたつのは早いですね。
少し調べてみました。以前書いたアプリのサイズですが、
物理 実行時
VB6 (見積書作成) 0.6M 22M
VB6 (参考印字) 0.36M 24M
Debug無 DelphiXE2 11.4M 29M
Debug付 DelphiXE2 18.1M 48M
どちらのアプリも見積書作成プログラムでDelphiアプリはVBプログラムに印字機能を追加
したものです。実際に起動するとDelphiプログラムは5秒程度無応答の後に起動します。
5秒というのは、クリックするのを忘れたか?と疑問に思うには十分な時間です。
Mr.XRAYさんのサイトを参考に対策というか別アプリで実験してみました。
参考にしたサイト
http://mrxray.on.coocan.jp/Delphi/plSamples/005_FormInPackage.htm
結果
MenuP2012.exe 25.3M → 実行時パッケージを利用したEXEサイズ 1.3M
と約1/20になりました。FormCreate で外に出した部分を読み込むので
対して早くならないかな?と思っていましたが起動時間も短くなりました。
以下行った作業を簡単に書いておきます。
実行時パッケージ利用手順
———————————
1.パッケージを作成する
a.新規パッケージを作成して、とりあえず元アプリから1つフォームを登録する。
b.パッケージに名前を付けて保存する。
c.残りのフォームは元アプリの xxx.dpr ファイルをエディタで開き、
元アプリと同じフォームを contains 区にならべる。
d.パッケージをビルドする。ビルドの途中で何か追加するか?聞いてくるので追加。
ビルドエラーが発生する場合は、エラーになっているものを消す。 ←かなり適当
2.作成したパッケージを作成するアプリのフォルダーにコピーする。
※ 環境オプションを変更していないと $(BDSCOMMONDIR)\Bpl に作成される。
※ $(BDSCOMMONDIR)\Bpl の位置がわからないときは … ボタンをクリックする。
3.元アプリの FormCreate と FormDestroy を修正
FormCreate
FHandleModule := LoadPackage('xxx.bpl'); // ←ここでパッケージロード
FormDestroy
if Assigned( FHandleModule ) = True then // ←自分でロードしたパッケージは
UnloadPackage( FHandleModule ); // 自分で消す
4.呼び出されるフォームに RegisterClass を追加
initialization
RegisterClass( TxxxForm );
5.アプリの「プロジェクトオプション」「パッケージ」「実行時パッケージ」に1で作成した
パッケージ名を追加して、コンパイル実行
みなさんありがとうございました。
|