13

ごく最近、私は長い間休止した後にDelphiに戻り、クライアントが古いリリースをサポートするように要求した、かなり単純なユーティリティアプリを作成しました...

最近はサイズはそれほど重要ではないことは知っていますが、1ユニットのアプリケーションをコンパイルすると1'084'416b実行可能ファイルになるのは奇妙なことに思いました。私が書いた唯一の.pasユニットは、主にGUIの豊富さのために、約20.8kの大きさです。

条項は次のusesとおりです。

uses
  Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, strutils,
  Dialogs, ADODB, DB, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Grids, Menus,
  Buttons;

アプリケーションのサイズを300〜400k以下に減らす方法はないでしょうか。

4

8 に答える 8

17
  1. デバッグまたはリリース ビルドを行いましたか? (サイズを小さくしてリリースし、最適化がオンになっていることを確認し、デバッグ情報をオフにします)

  2. 不要であれば RTII (delphi 2010 以降) をオフにしましたか? (小さい EXE サイズ。)

  3. メイン ユニットの uses 句のユニット数は、EXE のサイズを推測する良い方法ではありません。次のように考えてください。VCL 自体は大量のコードであり、データベース レイヤーは別の大量のコードであり、記述した内容はおそらく EXE サイズの非常に小さな割合です。

  4. 実行可能ファイルのサイズを理解するには、JCL Project Analyzer を試すか、Map オプションをオンにしたときに生成される MAP ファイルを読んでください。これにより、実行可能ファイルの内容が正確にわかります。

さまざまな理由でばかげていますが、たとえば、Delphi 7 を使用すると、より小さな実行可能ファイルを取得できます。最後に、アプリケーションを作成し、それを小さくしたい場合、どのくらいの時間がかかるか、すべてを再構築するのにどれだけの労力がかかるか (vcl の代替など) を検討し、自分に言い聞かせます。それ。

于 2010-01-27T21:44:56.527 に答える
13
  • KOLの使用を試すことができます(Key Objects Library は、 VCL を使用せずに Delphi を使用して強力な (しかし小さい) 32 ビット Windows GUI アプリケーションを開発するためのオブジェクトのセットです)。KOL を使用すると、非常にコンパクトな Windows32 GUI アプリケーションを作成できます (圧縮なしで ~11K から開始 - 提案されたシステム ユニットの交換を使用する場合)。ほとんどのコードは組み込みアセンブラに変換されます。

  • 別のオプションは、UPXのような exe コンプレッサーを使用することです。

于 2010-01-27T20:46:50.890 に答える
8

MapFileStats (DelphiTools.info) は、実行可能ファイル内で各ユニットが占有するスペースを確認できる優れた (無料の) ツールです。私自身のツールDelphiUnitSizesは、ユニット サイズに加えて、各関数またはクラスのサイズも表示する代替手段です。

Delphi 2010 では、おそらく RTL/VCL ユニットに RTTI が含まれているため、デフォルトの実行可能ファイルが約 30% 大きくなったため、古いバージョンの Delphi を使用してより小さな exe サイズを使用できます。

UPXも優れたツールであると他の人が述べているように、ウイルススキャナーによる誤検出は、私の経験ではそれほど頻繁ではありません。

Delphi 実行可能ファイルのサイズは、カスタム システム ユニットと UPX 圧縮を使用して大幅に削減できます。Delphi ベースのゲーム ジェネレーターZGameEditorを使用して、サイズが 64kb 未満の exe ファイルを生成できます。Delphi Berlin でも同様です。

于 2010-01-28T08:18:25.683 に答える
6

DFM の大きさは?これは、EXE のリソースとして含まれています。GUI の複雑さによっては、実行時にコードで GUI を作成すると、EXE のサイズを削減できる場合があります。

于 2010-01-27T21:42:41.730 に答える
3

プロジェクト ファイルの先頭に次の行を追加することも検討してください。

{$SetPEFlags 1}

ここでの説明: http://hallvards.blogspot.fr/2006/09/hack12-create-smaller-exe-files.html

于 2012-12-14T14:54:45.333 に答える
2

はい。ただし、他のコード単位を追加ファイルとして提供する必要があります。.net がアセンブリを必要とし、VB ランタイムなどがあるように、これは単なる Delphi ランタイムですが、exe に埋め込まれています。

別のオプションは、実行可能ファイルを圧縮することです。そのためのツールがあります。

于 2010-01-27T20:35:09.120 に答える
1
  • あなたはDelphiに戻ってくると言います。古いバージョンをまだ利用できる場合は、それを使用してください。新しいバージョンごとに機能が追加され、それらが必要ない場合は、それらがないとexeが小さくなります。

  • 実際に使用するユニットのみを含めるようにしてください。

しかし、あなたが何をするにしても、あなたが300kに下がることは非常に疑わしいです。メモリが機能する場合、Delphi2の「helloworld」アプリケーションでさえそれよりも大きくなります。

于 2010-01-29T19:22:18.307 に答える
0

プロジェクトにリンクされているリソース ファイルまたは画像はありますか?

ADODB にもかなりのオーバーヘッドが含まれていると思います。アプリが実際にデータベースを使用している場合、わずか 1MB でファイル サイズが大きくなりませんか? アプリはこの exe だけであることを忘れないでください。追加の dll などは必要ありません。

于 2010-01-28T10:35:17.500 に答える