Delphi XeはRTTIを無効にします
-
09-10-2019 - |
質問
私は最近Delphi XEを使用しましたが、RTTIのためにEXEサイズは非常に大きいです(私は思う)
rttiを削除する方法で、delphi 2009アプリケーション(490 kb)と同じくらい小さいアプリケーションサイズをcomprssionなしで削除できます。そして、RTTIの使用は何ですか
解決
要するに(Splashの答えのリンクによって提供される完全なストーリー):
{$ rtti明示的方法([])プロパティ([])フィールド([])}
ご了承ください Xe6以降、これはRTTIを無効にする個々のユニットにある必要があります。 その前に(xe5以下)、それはDPRファイルにある可能性があり、プロジェクト内のすべてのユニットに適用されます。
他のヒント
読む Delphiのオンラインヘルプ ...
... と 探す スタックオーバーフロー:
そのことに留意してください $RTTI
指令を含める必要があります 毎日 有効なユニット。見る プロジェクト全体の$ RTTI指令を設定するにはどうすればよいですか?
あなたの問題はRTTIとは関係ありません。比較的少ない増加(100〜200K)について話している場合、これはRTLの追加機能(Unicodeサポートなどに追加)によるものです。 500〜700kの増加が得られた場合は、VCL UIユニット(フォーム、コントロールなど)をリンクするかどうかを確認してください。 3MBの増加が得られると、追加のデバッグシンボルをオンにします。
これは、一部のジェネリック機能が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ファイルにある可能性があり、プロジェクト内のすべてのユニットに適用されます。
アプリケーションに非常に多くのサイズのオーバーヘッドを追加するのはRTTIだとは思いません。どうやってそれがあるか知っていますか?