-2

重複の可能性:
exe ファイルを減らす

EXE ファイルを指定して、未使用のコードをすべて削除し、アプリケーションで実際に使用されているコードを含む新しい EXE ファイルを作成するツールは何ですか? そういうものがあってしかるべきだと思います。好奇心のためだけに。しかし、未使用のコードなしで、より小さな EXE ファイルを生成するためのツールとしては、非常に優れていると思います。

PS: Delphi は、アプリケーションで使用されるすべてのオブジェクトのコードを含むスタンドアロン EXE ファイルを生成しますが、このオブジェクトのすべての要素が実際に使用されるわけではありません。これにより、大きなファイルが作成されます。Pascal の最初のバージョンは、実際に使用されるコードのみを含み、未使用のコードを挿入せず、EXE ファイルはより小さかったことを覚えています。

4

2 に答える 2

1

現在の Delphi では、未使用のコードも除外されています。これは、Delphi で簡単に確認できます。コンパイルすると、コードのガターに「青い点」が表示されます。使用されていない機能には青い点がなく、除外されていることを意味します。プロジェクト オプションの [最適化] チェックボックスをオンにすると、コードが書き直されてレジスタをより活用できるようになり、特定の変数が削除されます。

それにもかかわらず、Delphi 実行可能ファイルは、特に特定のユニットを使用する場合に大きくなります。Delphi 7 で作成できる最小の .exe は約 10Kb だと思います。それ以降のバージョンでは、これはおそらくもう少し大きくなります。

ファイルサイズの重要な原因は

  1. 資力。大きな画像や大量の画像は、多くのスペースを消費します。複数のフォームでアイコンを使用する場合は、それらを中央のイメージ リスト (共有データ ソース上) に配置してください。利用可能な PngImageList 実装の 1 つを使用して、画像サイズを小さくして品質を向上させます。
  2. rtti。実行時の型情報により、クラス定義が余分なスペースを消費します。このスペースは、一部はクラスに関するメタ情報によるものですが、主にすべての余分なコードが原因です。RTTI を使用して呼び出すことができるメソッドは、一種の「遅延バインディング」方式でバインドできます。そのため、コンパイラはメソッドを削除できるかどうかを判断できないため、実行可能ファイルに含める必要があります。
  3. 登録されたクラス。2 と同様。クラスが登録されている場合は、その名前を文字列として使用してフェッチおよびインスタンス化できます。これらのクラスは、コンパイラが必要かどうかを認識できないため、使用されない場合でも、プロジェクトに含める必要があります。

最近の Delphi バージョンでは RTTI が拡張されているのは事実です。これにより、クラスに関する RTTI メタ情報もより多くのスペースを消費するようになると思います。それについてあなたができることは限られています。

一般に、Delphi コンパイラは依然として多くの最適化を行っていると思います。exe ファイルのサイズを気にする必要はありません。もしそうなら、あなたはのようなパッカーを試すことができますupx. 私はupxで良い経験をしています。すべての機能を保持しながら、実行可能ファイルを元のサイズの約 5 分の 1 以下に削減します。

于 2012-11-05T22:26:38.547 に答える
0

アプリケーションが巨大な場合は、多くのデバッグ情報がコンパイルされていないかどうかを確認してください。リリース ビルドを試して、それよりも小さいかどうかを確認してください。

私が時々行うことは、すべての .dcu ファイルを単一のフォルダーにコンパイルするようにプロジェクトを構成することです。そうすれば、.exe にコンパイルされるすべての不要なユニットをすばやく確認できます。1 つの関数に対して 1 つのユニットを含めることがよくありますが、依存するユニットのツリー全体が得られます。uses 句を検索して、何らかの方法でこれらの依存関係を取り除こうとするだけです。

gexperts と cnpack の両方に、依存関係を表示したり、プロジェクト内の未使用のユニットをスキャンしたりするためのツールが含まれていると思います。彼らはこれに役立ちます。

不要な依存関係を削除したら、コンパイルした exe をいつでも upx で圧縮できます。それには欠点があると思われますが (barry kelly が少し前に書いています)、私はそれについて良い経験をしています。ファイルが 4 倍小さくなることもあり、これは大きな問題になる可能性があります。

于 2012-11-05T21:36:25.923 に答える