Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Das Programm wird zu groß (https://www.delphipraxis.net/201773-das-programm-wird-zu-gross.html)

Stevie 28. Aug 2019 12:16

AW: Das Programm wird zu groß
 
Seit XE6 bringt
Delphi-Quellcode:
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
in der dpr genau gar nix mehr - dass es vorher funktioniert hat, war ein Bug, denn der scope der $RTTI Direktive ist nur unit weit (vorher hat er sich global verhalten).

Um ggf eine Idee zu bekommen, was genau in der exe so viel Platz verbraucht, kann man mal die map Datei in MapFileStats öffnen und schauen.

samso 29. Aug 2019 06:06

AW: Das Programm wird zu groß
 
Zitat:

Zitat von Stevie (Beitrag 1443676)
Seit XE6 bringt
Delphi-Quellcode:
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
in der dpr genau gar nix mehr - dass es vorher funktioniert hat, war ein Bug, denn der scope der $RTTI Direktive ist nur unit weit (vorher hat er sich global verhalten).

Das scheint aber vom Benutzerprofil abzuhängen. Bei mir (Delphi 10.1) bringt es immerhin eine Einsparung von 10%.

Stevie 29. Aug 2019 10:29

AW: Das Programm wird zu groß
 
Zitat:

Zitat von samso (Beitrag 1443784)
Zitat:

Zitat von Stevie (Beitrag 1443676)
Seit XE6 bringt
Delphi-Quellcode:
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
in der dpr genau gar nix mehr - dass es vorher funktioniert hat, war ein Bug, denn der scope der $RTTI Direktive ist nur unit weit (vorher hat er sich global verhalten).

Das scheint aber vom Benutzerprofil abzuhängen. Bei mir (Delphi 10.1) bringt es immerhin eine Einsparung von 10%.

Delphi-Quellcode:
{$WEAKLINKRTTI ON}
wohlmöglich, die
Delphi-Quellcode:
$RTTI
Direktive allerdings hat nur Auswirkung auf Typen in derselben Unit.

samso 29. Aug 2019 11:23

AW: Das Programm wird zu groß
 
Zitat:

Zitat von Stevie (Beitrag 1443815)

Delphi-Quellcode:
{$WEAKLINKRTTI ON}
wohlmöglich, die
Delphi-Quellcode:
$RTTI
Direktive allerdings hat nur Auswirkung auf Typen in derselben Unit.

Das ist bei mir nicht so. {$WEAKLINKRTTI ON} hat bei mir keine Auswirkung auf die Programmgröße. Bei {$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])} wird das Programm 10% kleiner (nur Release und nur Win32 getestet).

Stevie 29. Aug 2019 14:40

AW: Das Programm wird zu groß
 
Zitat:

Zitat von samso (Beitrag 1443818)
Zitat:

Zitat von Stevie (Beitrag 1443815)

Delphi-Quellcode:
{$WEAKLINKRTTI ON}
wohlmöglich, die
Delphi-Quellcode:
$RTTI
Direktive allerdings hat nur Auswirkung auf Typen in derselben Unit.

Das ist bei mir nicht so. {$WEAKLINKRTTI ON} hat bei mir keine Auswirkung auf die Programmgröße. Bei {$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])} wird das Programm 10% kleiner (nur Release und nur Win32 getestet).

Wie bereits gesagt, vielleicht, wenn du es per include oder direkt in die jeweiligen Units packst, nicht aber wenn nur einzig und allein in der dpr ist, außer dort befinden sich auch Klassen, die dann komplett oder teilweise rausfliegen und sich ggf kaskadieren, da dann der Smartlinker seine Arbeit machen kann.
Denn genau dann würde man sich ggf Klassen zerreißen, bei denen RTTI notwendig ist, wenn von anderen Units aus $RTTI ausgeschalten wird. Wenn der Scope dieser Direktive nur unitweit ist, kann man genau kontrollieren, wo man explizit auf RTTI verzichten kann. Alles andere wäre die Rückkehr des in XE6 gefixten Bugs und sehr unratsam, es weiter zu empfehlen/benutzen.

samso 29. Aug 2019 15:04

AW: Das Programm wird zu groß
 
Zitat:

Zitat von Stevie (Beitrag 1443815)

Delphi-Quellcode:
{$WEAKLINKRTTI ON}
wohlmöglich, die
Delphi-Quellcode:
$RTTI
Direktive allerdings hat nur Auswirkung auf Typen in derselben Unit.

Stimmt, Du hast recht. Ich nehme alles zurück :oops: Es ist der {$WEAKLINKRTTI ON}-Schalter der die 10% bringt. Sorry!

Rolf Frei 29. Aug 2019 19:37

AW: Das Programm wird zu groß
 
Zitat:

Zitat von NoName1 (Beitrag 1443631)
Rolf Frei,
ich habe beides eingebunden, kompiliert und siehe da das Programm ist kleiner geworden.
Beim Nachschauen was diese {$WEAKLINKRTTI ON} Compiler-Direktive bedeutet bin ich
auf diesen Link in der DP gestoßen: https://www.delphipraxis.net/183645-...klinkrtti.html

Scheinbar birgt das Hinzufügen dieser Compiler-Direktiven auch Risiken mit sich, wenn mit Datenbanken
gearbeitet wird.

Ich werde die EXE-Datei einfach so lassen wie sie ist. Die Vereinsverwaltung ist halt auch sehr umfangreich.
Trotzdem vielen Dank an allen für die Diskussion und die Hilfe.

Nur so aus Interesse: Wieviel macht es denn aus?

Wenn du kein Databinding nutzt, sondern die meinses erachtens eh besseren und traditionellen TDatasource/TDatasets, sollte das kein Problem sein. Ich nutze diese Flags schon seit langer Zeiet und habe überhaupt kein Problem damit und ich nutze sehr viel DB Sachen, aber eben ohne das langsame RTTI basierende Databinding.

jaenicke 29. Aug 2019 21:30

AW: Das Programm wird zu groß
 
Wir benutzen die RTTI an vielen Stellen, das hat aber bei uns nichts mit Datenbanken zu tun.

Rolf Frei 30. Aug 2019 11:12

AW: Das Programm wird zu groß
 
Das Flag hat eh nur Auswirkung auf neu kompilierten, also eigenen Code. Die ganze Delphi Library wird ja nicht neu kompiliert und daher wird das da auch keine Auswirkung haben. Die Delphi DCU's sind ja so kompiliert, dass RTTI geht. Würde man die ganze Library noch neu kompilieren, würde die Exe Grösse nochmals massiv verkleienert. Mit der Einführung der neuen RTTI sind ja leider auch die exes in der Grösse explodiert und wenn man selber garkein RTTI braucht ist das schon sehr ärgerlich.

Uwe Raabe 30. Aug 2019 12:29

AW: Das Programm wird zu groß
 
Zitat:

Zitat von Rolf Frei (Beitrag 1443963)
Die ganze Delphi Library wird ja nicht neu kompiliert und daher wird das da auch keine Auswirkung haben. Die Delphi DCU's sind ja so kompiliert, dass RTTI geht. Würde man die ganze Library noch neu kompilieren, würde die Exe Grösse nochmals massiv verkleienert. Mit der Einführung der neuen RTTI sind ja leider auch die exes in der Grösse explodiert und wenn man selber garkein RTTI braucht ist das schon sehr ärgerlich.

Allerdings wird innerhalb der Delphi-DCUs selbst mittlerweile immer mehr RTTI wirklich benutzt. So ist das gesamte Component-Streaming in System.Classes ohne RTTI gar nicht mehr voll funktionsfähig (und wer will schon auf System.Classes verzichten). Insofern ist es auch keine Option mehr, in den Standard-DCUs das RTTI abzuschalten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz