Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fragen zu den Units (https://www.delphipraxis.net/74003-fragen-zu-den-units.html)

Stefan Hueg 26. Jul 2006 16:38


Fragen zu den Units
 
Nun, wenn ich irgendwelche Komponenten auf meine Form ziehe, mir sie dann doch nicht gefallen (z.B. ne Jedi-Komponente), bleiben die Units trotzdem im Projekt.

Frage Nr 1:
-Optimiert er den Code so, dass die offensichtlich nicht oder nie benötigten Units einfach weggelassen werden oder kompiliert er sie trotzdem in die EXE? Also muss ich die nicht mehr benötigten Units dann manuell löschen?

Frage Nr 2:
-Habe ich ein und dieselbe Unit in mehreren anderen Units unter "uses" eingebunden, "verlinkt" er sie dann mehrfach oder nur einmal? Also kompiliert er mehrere Instanzen der Unit oder nicht? Weiss nicht wie ich das besser ausdrücken soll ^^

Frage Nr 3:
-Soweit ich das gelesen hab, sollten Units, die von Komponenten auf der Form gebraucht werden oder welche, die vor der Ausführung benötigt werden (z.B. Units mit Typendeklarationen) im Interface-Teil stehen, andere, z.B. eigene Units sollten im Implementation-Teil stehen. Ist das richtig so?

Viele Grüße,

Stefan

RavenIV 26. Jul 2006 16:45

Re: Fragen zu den Units
 
Zitat:

Zitat von Stefan Hueg
Nun, wenn ich irgendwelche Komponenten auf meine Form ziehe, mir sie dann doch nicht gefallen (z.B. ne Jedi-Komponente), bleiben die Units trotzdem im Projekt.

Frage Nr 1:
-Optimiert er den Code so, dass die offensichtlich nicht oder nie benötigten Units einfach weggelassen werden oder kompiliert er sie trotzdem in die EXE? Also muss ich die nicht mehr benötigten Units dann manuell löschen?

der Compiler ist so "unintelligent", dass er alle Units, die eingetragen isnd und auf der Platte vorhanden sind, mit in die exe einkompiliert.
Wenn Du die exe so klein wie möglich haklten willst, musst Du selbst hand anlegen.

Zitat:

Zitat von Stefan Hueg
Frage Nr 2:
-Habe ich ein und dieselbe Unit in mehreren anderen Units unter "uses" eingebunden, "verlinkt" er sie dann mehrfach oder nur einmal? Also kompiliert er mehrere Instanzen der Unit oder nicht? Weiss nicht wie ich das besser ausdrücken soll ^^

Dies peilt der Compiler und bindet die Unit nicht mehrfach ein.


Zitat:

Zitat von Stefan Hueg
Frage Nr 3:
-Soweit ich das gelesen hab, sollten Units, die von Komponenten auf der Form gebraucht werden oder welche, die vor der Ausführung benötigt werden (z.B. Units mit Typendeklarationen) im Interface-Teil stehen, andere, z.B. eigene Units sollten im Implementation-Teil stehen. Ist das richtig so?

Das ist ein gutes Vorgehen.
Natürlich kannst Du auch alle Units "oben" (im Interface) einfügen.

Thorben77 26. Jul 2006 16:57

Re: Fragen zu den Units
 
Zitat:

Zitat von RavenIV
Wenn Du die exe so klein wie möglich haklten willst, musst Du selbst hand anlegen.

Dazu gibt es aber auch Hilfsmittel.

Ralf Kaiser 26. Jul 2006 17:52

Re: Fragen zu den Units
 
Zitat:

Zitat von RavenIV
der Compiler ist so "unintelligent", dass er alle Units, die eingetragen isnd und auf der Platte vorhanden sind, mit in die exe einkompiliert.
Wenn Du die exe so klein wie möglich haklten willst, musst Du selbst hand anlegen.

Das stimmt so nicht (ganz):

In der Exe landet aller Code der eventuell mal aufgerufen werden könnte.

Enthält eine Unit z.B. diese Funktion:

function NeverGetsCalled: boolean;
begin
Result := true;
end;

dann wird diese, falls sie nirgendwo aufgerufen wird wegoptimiert!

Schwierig wird es für den Compiler bei Objekten die Typinformationen enthalten (also alle Komponenten etc. bzw. Objekte die mit $M compilliert wurden). Der Code dieser Komponenten/Objekte könnte ja indirekt während der Laufzeit aufgerufen werden, indem man sich über "FindClass" (Parameter kann ja aus einer Benutzereingabe kommen!!) oder per RTTI das Objekt holt.

In einem solchen Fall wird die betreffende Klasse ja nirgendwo im Source direkt referenziert, der Code könnte aber trotzdem benötigt werden! Aus diesem Grunde bleibt dieser Code auf jeden Fall drin.

Im allgemeinen kann man sagen, daß alles bei dem im Editor die blauen Punkte vor der Zeile angezeigt werden auch in die fertige EXE gelangt. Fehlen diese Punkte so wird dieser Code auch nicht in der EXE zu finden sein.

[edit]: ausserdem werden alle Units ins Programm übernommen bei denen Code in "initialization" oder "finalization" steht, da der Compiler nicht entscheiden kann ob dieser Code etwas eventuell für das Programm entscheidendes tut.


Ciao,
Ralf


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 Uhr.

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