10

私は最近delphi xeを使用していますが、rttiのためにexeサイズが非常に大きい(と思います)

rtti を削除する方法と、comprssion なしでアプリケーションのサイズを Delphi 2009 アプリケーション (490 kb) と同じくらい小さくすることはできますか? そしてrttiの用途は何ですか

4

5 に答える 5

17

要するに(スプラッシュの回答のリンクで提供される全文):

{$RTTI 明示的なメソッド([]) プロパティ([]) フィールド([])}

XE6 以降では、これは RTTI を無効にする個々のユニットごとに必要であることに注意してください。それ以前 (XE5 以下) は、DPR ファイルに含まれている可能性があり、プロジェクト内のすべてのユニットに適用されます。

于 2010-10-20T06:48:36.033 に答える
8

Delphi のオンライン ヘルプを読む...

...そしてスタックオーバーフローを検索します:

$RTTIディレクティブは、それが有効になるすべてのユニットに含める必要があることに注意してください。プロジェクト全体に $RTTI ディレクティブを設定するにはどうすればよいですか? を参照してください。

于 2010-10-20T06:40:45.500 に答える
7

あなたの問題はRTTIとは関係ありません。比較的小さな増加(100-200K)について話している場合、これはRTLの追加機能(Unicodeサポートなどのために追加)によるものです。500〜700K程度の増加がある場合は、VCL UIユニット(フォーム、コントロールなど)をリンクしているかどうかを確認してください。3Mb増加した場合は、追加のデバッグシンボルをオンにしています。

于 2010-10-20T08:12:47.100 に答える
4

これは、いくつかのジェネリック機能がsysユニットに追加されているためです。ジェネリックは2009年に追加されましたが、システムユニットでは、一部のクラスがxeおよびxe2のジェネリックで書き直されました。私見では

このフラグを追加して、dprファイル([プロジェクト]> [ソースの表示])のサイズを個々のユニット(XE5以降)*に縮小します。

{$SETPEFlAGS IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED or
 IMAGE_FILE_LOCAL_SYMS_STRIPPED OR IMAGE_FILE_RELOCS_STRIPPED}

{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

(*)XE5以降では、これはRTTIを無効にする個々のユニットにある必要があることに注意してください。それ以前(XE4以下)は、DPRファイルに含まれている可能性があり、プロジェクト内のすべてのユニットに適用されます。

于 2012-07-19T18:06:24.630 に答える
3

アプリケーションに大きなサイズのオーバーヘッドを追加するのは RTTI ではないと思います。どうやってそれを知っていますか?

于 2010-10-20T07:46:38.293 に答える