![]() |
Nicht benötigte Units bereinigen
Hallo zusammen,
ich suche nach einer einfachen Möglichkeit alle Units zu finden, die im aktuellen Projekt nicht angeprochen und somit nicht benötigt werden. Hat einer einen Tipp wie man dies am einfachsten bewerkstelligen kann? Vielen Dank. Viele Grüße Horst Meyer |
AW: Nicht benötigte Units bereinigen
Hallo,
CN-Pack installieren, das ereugt dir im Menü einen Uses-Cleaner. LG Edmund |
AW: Nicht benötigte Units bereinigen
Hallo,
so einfach ist das allerdings nicht. Units haben
Delphi-Quellcode:
und
initialisation
Delphi-Quellcode:
Abschnitte. Schon ihre reine Anwesenheit im Projekt kann also den Programmablauf beeinflussen.
finalization
Zum Beispiel Units die weitere grafik-datei-formate bereitstellen. Die registrieren sich selbst, werden aber scheinbar nirgendwo verwendet. |
AW: Nicht benötigte Units bereinigen
Zitat:
|
AW: Nicht benötigte Units bereinigen
Alternativ könnte man die Map-Datei überprüfen, aber:
|
AW: Nicht benötigte Units bereinigen
![]() |
AW: Nicht benötigte Units bereinigen
Ausführliche MAP-Datei erstellen, alle Zeile, die mit Line numbers for beginnen, raussuchen. Sie enthalten alle Units, aus denen etwas ins Kompilat übernommen wurden.
Sollte für den Anfang eigentlich erstmal ausreichen. Und wenn ich das bei meinem ollen Delphi 7 richtig sehe, sind Units, die nur Resource-Strings enthalten, auch in der MAP-Datei aufgeführt. Jedenfalls finde ich in den MAP-Dateien von Programmen, die Indy nutzen auch die IdResourceStringsCore.pas, und die enthält (neben Kommentaren) nur Resource-Strings. Mal eben in PascalScript hingedaddelt:
Delphi-Quellcode:
Sollte so übernommen werden können.
program Test;
procedure CheckUnits(sFile : String); var i : Integer; s : String; slMap : TStringList; slUnits : TStringList; begin slMap := TStringList.Create; slMap.LoadFromFile(sFile); slUnits := TStringList.Create; for i := 0 to slMap.Count - 1 do begin if Copy(slMap[i],1,16) = 'Line numbers for' then begin s := Copy(slMap[i],18,1024); s := Copy(s,1,Pos('(',s) - 1); slUnits.Add(s); end; end; slUnits.Sort; sFile := ChangeFileExt(sFile,'.UsedUnits'); slUnits.SaveToFile(sFile); slUnits.Free; slMap.Free; end; begin CheckUnits('Programmname.map'); end. |
AW: Nicht benötigte Units bereinigen
![]() Mit dem Delphi Unit Dependency Scanner mache ich das. Der zeigt, u.a. von wie vielen Units die einzelne Unit genutzt wird. Wenn man den Trick raus hat, dann kann man sehr schön alle unnötigen Units aus dem Projekt werfen. Alle Units, die nur von einer Unit -also von der DPR- genutzt werden, sind unnötig. |
AW: Nicht benötigte Units bereinigen
Warum einfach wenn es auch umständlich geht. :wink:
Das einzig sinnvolle: Zitat:
|
AW: Nicht benötigte Units bereinigen
Zitat:
|
AW: Nicht benötigte Units bereinigen
@freimatz
Damit wirfst Du die unnötigen Units aus einer Unit heraus, aber nicht aus dem Projekt. |
AW: Nicht benötigte Units bereinigen
Das ist richtig. Das habe ich nicht berücksichtigt. Wozu das denn braucht - im Gegensatz zu uses zu cleanen - verstehe ich gerade nicht. Bei uns hat jedes Projekt einen eigenen Ordern und alle units liegen darin oder unterhalb.
|
AW: Nicht benötigte Units bereinigen
Im Projekt können auch Units drinstehen, die von keiner Unit genutzt werden. Da verliert man bei einem laufenden Projekt schnell den Überblick, gerade wenn man viel umbaut.
|
AW: Nicht benötigte Units bereinigen
Hallo zusammen
Noch eine Möglichkeit ist über die Compileroption "--symbol-report" von ![]() Danach erzeugt der Compiler im DCU Path *.symbol_report Dateien. Sind XML und diese kann man analysieren. Steht dort dann <uses> Tag ohne Client Nodes. Diese Unit's werden dann nicht verwendet. Beispiel:
Code:
Beispielsweise steht in den Uses hier Unit Vcl.Grids, sie wird aber nicht verwendet.
<?xml version="1.0" encoding="UTF-8"?>
<unit name="My.Plan"> <uses name="Vcl.Grids"> </uses> </unit> Hatte mal versuche ein Projekt aufzusetzen das diese liest und entsprechend herausfiltert. Aber zeittechnisch nie weiter verfolgt. Meine ersten Versuche damit liegen unter ![]() Ziel von mir war es, das im Buildprozess zu automatisieren. Thx und Gruss Nathan |
AW: Nicht benötigte Units bereinigen
Gerade mal PAL Lite gestartet und folgende Probleme festgestellt:
Mein Hauptprojekt in der Firma (gut 11 MiB EXE, D2010) war früher erzeugt 300 KB kleiner als compiliert. Jetzt nach dem Löschen von Uses ist es erzeugt etwa so groß wie vorher compiliert und compiliert 50 KB kleiner als erzeugt, also genau andersrum wie vorher und in jedem Fall größer. Sehr seltsam. |
AW: Nicht benötigte Units bereinigen
Zitat:
Mein Test Case ist eine Unit, die lediglich einen Class Helper enthält, dessen Methode dann in einer anderen Unit benutzt wird:
Delphi-Quellcode:
Im Gegensatz zu dem von dir beschriebenen Verhalten, empfiehlt PAL hier nicht die Unit zu entfernen.
uses
System.Classes; type TComponentHelper = class helper for TComponent public function IsDataModule: Boolean; end; Abgesehen von der Lite Version, was ist bei dir anders? |
AW: Nicht benötigte Units bereinigen
Liste der Anhänge anzeigen (Anzahl: 1)
Hab ein Beispiel angehängt. Unit2 definiert einen Class Helper, deren einzige Methode ich in Unit1 aufrufe. In dem Fall von einem Nachkommen, aber PAL funktioniert meines Wissens auch dann nicht, wenn es sich um die Klasse selbst handelt, die einen Class Helper bekommen hat.
(Das ist D2010.) |
AW: Nicht benötigte Units bereinigen
Danke, mit dem Beispiel kann ich es auch mit der Vollversion reproduzieren. Ich werde das an den Entwickler weitergeben.
|
AW: Nicht benötigte Units bereinigen
Zitat:
|
AW: Nicht benötigte Units bereinigen
Zitat:
|
AW: Nicht benötigte Units bereinigen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 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