![]() |
Lasst ihr nicht bentutzt Units im Programm?
Wenn ich mein Delphi starte, steht in der Uses-Klausel folgendes:
Delphi-Quellcode:
Wenn ihr nicht alle braucht, lasst ihr sie dann tritzdem drin?
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; 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! |
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. |
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...
|
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 |
Re: Lasst ihr nicht bentutzt Units im Programm?
Zitat:
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. |
Re: Lasst ihr nicht bentutzt Units im Programm?
Zitat:
![]() |
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. |
Re: Lasst ihr nicht bentutzt Units im Programm?
Homepage von Michael Puff
Fehler 500 - Interner Fehler. Es ist ein interner Serverfehler aufgetreten. |
Re: Lasst ihr nicht bentutzt Units im Programm?
Geht wieder.
|
Re: Lasst ihr nicht bentutzt Units im Programm?
Zitat:
Zitat:
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. |
Re: Lasst ihr nicht bentutzt Units im Programm?
Zitat:
(deswegen wird ein leeres Projekt auch 346 KB alleine durch 'uses Forms' größer, nur um ein Extrembeispiel zu nennen) |
Re: Lasst ihr nicht bentutzt Units im Programm?
Zitat:
Liest man eigentlich meine Beiträge auch...?... |
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 |
Re: Lasst ihr nicht bentutzt Units im Programm?
Zitat:
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). |
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? |
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?! |
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...
|
Re: Lasst ihr nicht bentutzt Units im Programm?
Das ist keinesfalls einfach, da es {$IFDEF ...} Zeilen geben kann.
|
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 |
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: ![]() grüße, daniel |
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: ![]() Bin leider zeitlich etwas akut knapp, deshalb hoffe ich das jemand von Euch mal einfach testet und seinen Einschätzung gibt. Grüße // Martin |
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: ![]() 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 |
Re: Lasst ihr nicht bentutzt Units im Programm?
@roderich:
Lies mal meinen vorigen Post :mrgreen: |
Re: Lasst ihr nicht bentutzt Units im Programm?
![]() Cooles Tool, hab mal die VCL gecheckt, selbst die hat in Units Units eingebunden die sie nicht verwendet.... |
Re: Lasst ihr nicht bentutzt Units im Programm?
öhm, bei mir bringt das garnich die units auszubinden, da das prog nachher trotzdem genausogross wird.
|
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. |
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
|
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 10:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz