![]() |
Unbenutzte Improrts finden?
Der Titel sollte eigentlich schon alles sagen.
Ich würde aus den uses gerne alles rauswerfen, was ich nicht brauche. Gibt es da irgendeinen Trick? |
Re: Unbenutzte Improrts finden?
![]() |
Re: Unbenutzte Improrts finden?
Das sollte eigentlich automatisch vom Linker entfernt werden
|
Re: Unbenutzte Improrts finden?
Warum sollte der Linker das tun?
Sofern man eine Unit einbindet, die einen Initialization-Abschnitt hat, kann der Linker nicht entscheiden, ob die Unit wirklich nicht gebraucht wird, oder ob der Teil unter Initialization aus irgend einem Grund wichtig ist. |
Re: Unbenutzte Improrts finden?
Auf
![]() |
Re: Unbenutzte Improrts finden?
Danke, ICarus ist sehr gut, kann ich nur weiterempfehlen :)
|
Re: Unbenutzte Improrts finden?
PS: Nur weil eine Unit al "nicht genutzt" angezeigt wird, da nicht in dieser Unit "extern" aufgerufen wird, heißt es noch lange nicht, daß diese Unit wirklich nicht genutzt wird.
z.B. einige ShareMem-Units und die SysUtils sind solche Fälle, denn sie richten vorallem etwas ein, welches über Umwege genutzt wird. Die SysUtils richtet z.B. eine "bessere"/schönere Exceptionbehandlung ein, welche dann über die System-Unit behandelt wird.
Delphi-Quellcode:
program Test;
var i: Integer; begin i := 0; if 123 div i = 8 then ; end.
Delphi-Quellcode:
So, wie man sieht, wird nichts direkt aus der SysUtils verwendet, welches wohl auch sowas wie ICarus anmerken sollte, aber dennoch kann es nötig/gewollt sein, daß diese Unit eingebunden ist.
program Test;
uses SysUtils; var i: Integer; begin i := 0; if 123 div i = 8 then ; end. Also ein bissl nachdenken und nicht gleich alles rauslöschen, welches angezeigt wird, sollte man schon. |
Re: Unbenutzte Improrts finden?
Der
![]() |
Re: Unbenutzte Improrts finden?
Zitat:
Hier hat man z.B. einen Initialization-Block, aber ohne Verwendung von NutzeObjekt wäre das Objekt nicht nötig und die ganze Unit könnte entfallen.
Delphi-Quellcode:
Bei sowas würde mir ein Sprachkonstrukt gefallen, wo man sagen könnte wann etwas einkompiliert(gelinkt werden soll.
unit MyUnit;
interface function NutzeObjekt: String; implementation var Objekt: TStrings; function NutzeObjekt: String; begin Result := Objekt.Text; end; procedure ErstelleObjekt; begin Objekt := TStringList.Create; Objekt.Text := Irgendwas; end; procedure LöscheObjekt; begin Objekt.Free; end; initialization ErstelleObjekt; finalization LöscheObjekt; end. z.B.:
Delphi-Quellcode:
Somit könnte der Compiler/Linker erkennen daß nichts in Initialization und Finalization gemacht wird und würde somit nicht einbinden müssen, bzw. nur eine leere Unit, welche er ja eh wegläßt.
initialization
{$IFUSED 'NutzeObjekt'} ErstelleObjekt; {$ENDIF} finalization {$IFUSED 'NutzeObjekt'} LöscheObjekt; {$ENDIF} end. |
Re: Unbenutzte Improrts finden?
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 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