質問
アプリケーション内のリソースを削減するにはどうすればよいですか? 私はいくつかのトリックを試しました コードを減らして書き直し、行数を減らして、 コメントを減らす、 最終的なEXEを圧縮しましたが、これは私が行きたい方法ではありません。 変数の型キャストを改善し、 アプリケーション内からICONs、BMP、JPGを削除します 最終的なEXEおよび一般的なリソース消費において、アプリケーションをできるだけ小さくする必要があります。 これ以上のアイデア、このテーマに関する良い記事 ありがとう
解決
プログラムが複数回使用する画像を画像リストまたはTGraphicコンポーネントに入れ、それらをデータモジュールに入れます。これらのグリフを使用して、すべてのコンポーネントを画像リストにリンクします。オブジェクトインスペクターを使用して同じグリフを複数のコンポーネントに追加すると、その複数のコピーが作成され、ロード時間と実行可能ファイルとワーキングセットのサイズの両方が増加します。
他のヒント
プロジェクトオプションでデバッグ情報をオフに切り替える方法はどうですか:
- デバッグ情報なし
- ランタイムチェックなし
- 可能であれば、外部ユニットの使用数を減らします。
ただし、デバッグ情報は重大な問題になります。
とにかくコンパイラがコメントを削除するコメントを削除するのに時間を費やしません
外部サービス(Amazon S3など)から画像を参照できます
再配置は問題ではありません:
relocation-infoを残してください!
Delphiでは、次のようにできます。
// Remove relocation table (generates smaller executables) :
// (See http://hallvards.blogspot.com/2006/09/hack12-create-smaller-exe-files.html)
{$SetPEFlags 1} // 1 = Windows.IMAGE_FILE_RELOCS_STRIPPED
乾杯!
VCLをドロップし、KOLおよびMCKを使用します。 http://kolmck.net/
これは根本的で非常に大きな変更ですが、exeサイズが小さくなります。
Delphiが現在オプションを提供し、以前のバージョンの新しいフォームに対して無条件にこれを行ったとしても、すべてのフォームを自動的に作成しないでください。メインフォームのみを作成し、モーダルダイアログの表示に次の(擬似)コードを使用します。
procedure TMainForm.OptionDialog(Sender: TObject);
var
Dlg: TOptionDialog;
begin
Dlg := TOptionDialog.Create(nil);
try
// prepare dialog
if Dlg.ShowModal = mrOK then begin
// apply changed settings
end;
finally
Dlg.Free;
end;
end;
これにより、特に多くのコントロールを含む複雑なダイアログの場合、アプリケーションのロード時間が短縮され、全体的なリソース使用量が削減されます。
最初に測定し、次に最適化します。あなたのアプリケーションはどれくらいの大きさで、どのくらいの大きさにしたいですか?
心配していますか...
ディスク上のアプリケーション.EXEファイルのサイズは?その後...
- 実行時パッケージを使用してビルドするオン。小さな.EXEを取得しますが、.bplsも配布する必要があります。
アプリケーションで使用されるRAMメモリ?その後...
- 実行時パッケージをオフにしてビルド-リンカはパッケージの未使用部分のほとんどを省略します。
アプリケーションインストーラーのサイズは?その後...
- ランタイムパッケージを使用してビルドするオフ
- Inno Setupを使用
- 上記の提案のほとんどは?
インストール後のアプリケーションPLUS PACKAGES / DLLSのサイズは?その後...
- ランタイムパッケージでビルドするオフ、UPXを使用する
Project -> Options -> Compiler:
===============================
Optimization ON
Debug Information OFF
Local Symbols OFF
Reference Info OFF
Use debug DCUs OFF
Project -> Options -> Packages:
===============================
Build with runtime packages ON (but you will have to distribute your BPLs!)
Note to non-delphi folks:
a BPL is just a DLL, but with magic Delphi dust to make it easier to use.
これは本当にこのすべてのトラブルの価値があるのですか? 640 KBのメモリ時間はもうありません。
EXEを小さくしたい場合は、パッケージとライブラリの動的リンクを使用します。それはほとんどのブーストを与えます。また、すべてのリソース(画像、サウンド)を個別のDLLに入れます。コメントを削除して、すべてのコードを1行の長さで記述しても、何も保存されません。
通常、より小さなEXEサイズが必要な場合は、以前のバージョンのDelphiを使用します。
exeファイルの圧縮には、常に UPX を使用します。完全に機能し、多くの場合、係数2の圧縮が行われます。そして、もちろん、すべてのデバッグ情報を無効にすると、ファイルサイズが小さくなります。
Red Gateのものなどのメモリプロファイラを使用します実行時のメモリ使用量をリアルタイムで表示します。
UPXおよびASPackは、ウイルス対策誤検知アラームのため、多くの問題を引き起こします。カスペルスキーはそれをたくさんやっています!