Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Lasst ihr nicht bentutzt Units im Programm? (https://www.delphipraxis.net/21544-lasst-ihr-nicht-bentutzt-units-im-programm.html)

Nicolai1234 4. Mai 2004 17:16


Lasst ihr nicht bentutzt Units im Programm?
 
Wenn ich mein Delphi starte, steht in der Uses-Klausel folgendes:
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
Wenn ihr nicht alle braucht, lasst ihr sie dann tritzdem drin?
Ich achte darauf eigentlich garnicht, aber ich habe überlegt, wie viel Kapazität eine Unit so wegnimmt! Gibt es da irgendwelche KB-Zahlen?

Wie kann man eigentlich einzelne funktionen aus den Units "isolieren", dann könnte man sich nämlich eine eigende mit allem nötigen bauen!

Christian Seehase 4. Mai 2004 17:18

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Moin Nicolai,

meist gehört bei mir als eine der letzten Aktionen eine Bereinigung der uses Abschnitte dazu.
Allein schon der Übersicht halber.

SirThornberry 4. Mai 2004 17:19

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Einzelne Funktionen aus den Units isolieren sieht im prinzip so aus das du sie einfach abschreiben musst und in eine eigene unit packen. Allerdings musst du dann auch alle vorgänger klassen von der die eigentlich klasse abgeleitet ist mit isolieren und das wäre nen riesiger aufwand. Zudem benutzen einige Klassen andere Klassen. Beispiel ist SpinEdit unter Sampels. Da werden auch buttons oder so benötigt. das heißt du müsstest dann auch die buttons + die Textfeld-unit isolieren incl deren vorgänger...

glkgereon 4. Mai 2004 20:15

Re: Lasst ihr nicht bentutzt Units im Programm?
 
jo, ich habs mal versucht, hab mit der sysutil angefangen
es kam folgendes dabei raus:

nach ca. 2-3 stunden arbeit hatte ich für ein SEHR kleines pürojekt gerade mal ca. 100 zeilen rauswerfen können, von ich glaub über 5000 (sysutils, oder?)

es hätten noch sämtliche anderen angestanden

daher mein fazit aus der aktion:
sobald dein projekt mehr als nur ein edit und ein label umfasst, lohnt es sich nicht

das kommt ganz einfach daher, das alles in units geschrieben ist (nicht in dlls), und du daher ca 50.000 zeilen (glaub ich) einbinden musst

tommie-lie 4. Mai 2004 20:49

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Zitat:

Zitat von glkbkk
das kommt ganz einfach daher, das alles in units geschrieben ist (nicht in dlls), und du daher ca 50.000 zeilen (glaub ich) einbinden musst

Aha, und dann sag mir mal, wie man die DLLs ohne passende Import-Units nutzen will...
Außerdem ist es gerade einer der Vorteile, daß man keine externen DLLs für Projekte benötigt.

Und zweitens wird nur das reinkompiliert, was auch ausgeführt wird. Von den ganzen Units, aus denen man keine Funktion aufruft (System.pas und SysInit.pas mal ausgenommen) werden also nur die Initialization -und Finalization-Abschnitte kompiliert. Trotzdem sollte man nicht verwendete Units nicht einbinden, eben weil die Initialization und die Finalization immernoch Platz in der EXE benötigen, selbst man man eigentlich nichts aus der Unit braucht.

Luckie 4. Mai 2004 22:33

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Zitat:

Zitat von glkbkk
nach ca. 2-3 stunden arbeit hatte ich für ein SEHR kleines pürojekt gerade mal ca. 100 zeilen rauswerfen können, von ich glaub über 5000 (sysutils, oder?)

Was für Funktionen brauchtest du denn? Kuck doch mal hier: http://www.luckie-online.de/Downloads/DelphiUnits/

Robert Marquardt 5. Mai 2004 05:39

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Es kommt auf die unit an die man rauswirft.
Code in initialization bzw finalization sections wird immer eingebunden egal ob man
etwas aus der Unit benutzt oder nicht.
Besonders bei VCL Units bewirken die Abhaengigkeiten zu anderen Units das recht viel Code eingebunden wird.

faux 5. Mai 2004 06:11

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Homepage von Michael Puff
Fehler 500 - Interner Fehler.
Es ist ein interner Serverfehler aufgetreten.

Luckie 5. Mai 2004 06:19

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Geht wieder.

Delphi_Fanatic 5. Mai 2004 06:36

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Zitat:

Einzelne Funktionen aus den Units isolieren sieht im prinzip so aus das du sie einfach abschreiben musst und in eine eigene unit packen.
Zitat:

jo, ich habs mal versucht, hab mit der sysutil angefangen
Was ist denn das überhaupt für eine Idee ? :gruebel:

Schon mal drüber nachgedacht, wieviel Aufwand ein möglicher Delphi-Update in der Zukunft für Euch bedeutet, wenn Ihr jetzt anfangt, in den Delphi-eigenen Units wie 'Sysutils.pas' Änderungen durchzuführen ??

Im Übrigen werden in die exe sowieso nur diejenigen Quelltext-Teile rein kompiliert, die auch tatsächlich benötigt werden.

NicoDE 5. Mai 2004 06:58

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Zitat:

Zitat von Delphi_Fanatic
Im Übrigen werden in die exe sowieso nur diejenigen Quelltext-Teile rein kompiliert, die auch tatsächlich benötigt werden.

Der Punkt ist: initialization, finalization, Ressourcen, initialisierte Variablen, etc. werden benötigt/benutzt :)
(deswegen wird ein leeres Projekt auch 346 KB alleine durch 'uses Forms' größer, nur um ein Extrembeispiel zu nennen)

tommie-lie 5. Mai 2004 11:44

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Zitat:

Zitat von Delphi_Fanatic
Schon mal drüber nachgedacht, wieviel Aufwand ein möglicher Delphi-Update in der Zukunft für Euch bedeutet, wenn Ihr jetzt anfangt, in den Delphi-eigenen Units wie 'Sysutils.pas' Änderungen durchzuführen ??

Deswegen macht man Backups (vielleicht braucht man später dochmal eine Funktion, die man im aktuellen Projekt nicht braucht. Es soll ja vorkommen, daß ich jetzt nicht genau das gleiche mache wie nächste Woche... Und mit 'nem passenden Diff-Programm kriegt man auch nach einem Update einen Großteil wiederhergestellt. Klar, viel Copy&Paste-Arbeit ist es immer.


Liest man eigentlich meine Beiträge auch...?...

glkgereon 5. Mai 2004 11:51

Re: Lasst ihr nicht bentutzt Units im Programm?
 
das problem ist ja: wenn du auch nur eine halbwegs brauchbare function benutzt, braucht die wieder 3 andere welche wiederum 3 neue brauchen usw. usw. usw., also die komplette unit

@warum nit alles in ner dll
war halt nurne anmerkung

tommie-lie 5. Mai 2004 12:24

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Zitat:

Zitat von glkbkk
das problem ist ja: wenn du auch nur eine halbwegs brauchbare function benutzt, braucht die wieder 3 andere welche wiederum 3 neue brauchen usw. usw. usw., also die komplette unit

Ja, das ist vor allem bei den meisten String-Funktionen der Fall...
Da hilft es nur, die Funktionen alle ausfindig zu machen und einzeln zu kopieren. Evtl sogar gleich in eine einzige Funktion zusammenführen, weil man dann teilweise den Calling-Overhead vermeidet. Aber ich weiß nicht, ab welcher Funktionslänge sich das zusammenführen lohnt, da ich nicht weiß, bei welcher Funktionslänge der Delphi-Compiler die Funktionen direkt in den Programmablauf einbaut und wann er sie noch als einzelne Funktionen belässt (ein inline-Attribut gibt es ja in Pascal leider nicht).

Phoenix 5. Mai 2004 12:37

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Um zur ursprünglichen Frage zurückzukehren (es ging um nicht benutzte Units):

Gibt es eigentlich eine Methode um herauszufinden, welche Units ich tatsächlich nicht verwende, ausser sie einzeln auszukommentieren und hoffen, daß sich das Projekt noch kompilieren lässt?

Schubi 5. Mai 2004 12:52

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Phoenix hat mich auf eine Idee gebracht.

Es sollte doch nicht schwer sein, aus einer PAS alle Units in der Used-Clause auszulesen und aus denen dann alle Funktionen/Prozeduren und die dann in den Quelltexten zu suchen?! sollte möglich sein. Oder?!

alcaeus 5. Mai 2004 12:54

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Na klar ist es möglich...einfach jedes uses suchen, welches nicht zwischen Hochkommas, aber es ist eine Riesenarbeit, das zu programmieren. Falls du eine neue Unit nur mit den verwendeten Funktionen bauen willst, das wird schwer, du musst bedenken dass es in den Klassen Vererbung etc. braucht und du deshalb mehr Units und Funktionen brauchst...

Robert Marquardt 5. Mai 2004 13:35

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Das ist keinesfalls einfach, da es {$IFDEF ...} Zeilen geben kann.

mschaefer 5. Mai 2004 13:43

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Moin, moin,

ja das ist vom Pascal Quellcode her wohl ziemlich schwierig. Eigentlich ist das ja
auch die Aufgabe eines guten Linker-Compiler-Gespanns. Delphi hat sich seine schnelle
Übersetzungszeiten eben damit erkauft, das es den Linker nicht so scharf filtern lässt,
wie das eben ein C++ System tut. Mich würde es allerdings nicht wundern, wenn es bei Borland
doch ein Tool gibt mit dem die Unit - Abhängigkeiten aufgelistet werden können. Das ist
ja eine Aufgabe der Linkerkonsturkteure...

Grüße // Martin

Sanchez 5. Mai 2004 13:55

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Von Peganza gibts nen Freeware Uses-List-Analyzer. Die Oberfläche ist zwar spartanisch und die nichtverwendeten Units muss man sich durch die Volltextsuche rauspicken, aber is das einzige Tool in die Richtung, das ich gefunden habe.

Download: http://www.peganza.com/ICARUS.zip (0.9 MB)

grüße, daniel

mschaefer 5. Mai 2004 13:59

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Moin, moin nochmal

irgendwie ist mir da doch noch was im DeepHirn herumgeschwirt, das es da doch was geben sollte und hier ist kommt der Link:

http://www.cequalsoft.com/devtools/udv/start.htm

Bin leider zeitlich etwas akut knapp, deshalb hoffe ich das jemand von Euch mal
einfach testet und seinen Einschätzung gibt.

Grüße // Martin

roderich 5. Mai 2004 14:01

Re: Lasst ihr nicht bentutzt Units im Programm?
 
zu dem Thema gab es hier schon Threads.

Ein sehr gutes Tool (Freeware !) ist Icarus von Peganza:

www.peganza.com

sehr zu empfehlen, schnell und zuverlässig.
Habe damit in meinem größten Projekt mit über 300 verwendeten Units Dutzende von überflüssigen uses gefunden.

Roderich

Sanchez 5. Mai 2004 14:10

Re: Lasst ihr nicht bentutzt Units im Programm?
 
@roderich:
Lies mal meinen vorigen Post :mrgreen:

Vjay 5. Mai 2004 14:13

Re: Lasst ihr nicht bentutzt Units im Programm?
 
www.peganza.com

Cooles Tool, hab mal die VCL gecheckt, selbst die hat in Units Units eingebunden die sie nicht verwendet....

Pseudemys Nelsoni 5. Mai 2004 14:17

Re: Lasst ihr nicht bentutzt Units im Programm?
 
öhm, bei mir bringt das garnich die units auszubinden, da das prog nachher trotzdem genausogross wird.

Phoenix 5. Mai 2004 14:22

Re: Lasst ihr nicht bentutzt Units im Programm?
 
Naja, das bringt nur bedingt was.
Eine unit wird compiliert und eingebunden, wenn sie das erste mal verwendet wird. Auch wenn Du sie dann in einer anderen Unit rauswirfst, wird sie möglicherweise noch von einer dritten verwendet und ist somit im Projekt drin.

Interessant wird das dann, wenn Deine Units von verschiedenen Applikationen verwendet werden. Hier kann es nämlich dann schon mal sein, das die eine oder andere Applikation dann ein gutes Stück schrumpft.

glkgereon 5. Mai 2004 14:41

Re: Lasst ihr nicht bentutzt Units im Programm?
 
das problem ist, es bringt gar nichts sysutils rauszutuen, weil andere units sysutils includen, und somit alles beim alten bleibt

roderich 5. Mai 2004 16:01

Re: Lasst ihr nicht bentutzt Units im Programm?
 
@Sanchez: ich weiß, war zu langsam..... 8)

@Alle: eine Überlegung wert ist immer die Compilierung mit Laufzeit-Packages, vor allem mit der VCL50.bpl/VCL60.bpl/....
damit ist das .exe oft nur noch wenige zig KB groß.
natürlich darf man dann nicht vergessen, die .bpl mit auszuliefern.

Roderich


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 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