Macht es einen Unterschied, wenn ich meine uses-Klausel bereinige, wenn die entfernten Einheiten noch in anderen Einheiten verwendet werden?

7

Persönlich mag ich es, wenn meine uses -Klauseln so klein wie möglich sind, aber in vielen Anwendungen werden die wirklich großen Einheiten (in Bezug auf das Blähen der ausführbaren Datei) wie Forms oder VirtualTrees in mindestens einer anderen Einheit benötigt trotzdem.

Also: Macht es einen Unterschied, wenn ich meine uses -Klauseln säubere, selbst wenn am Ende keine Einheit aus dem Projekt entfernt wird? Wenn ja: In welcher Weise? Und: Ist das Reinigen der uses -Klausel etwas, das so schnell wie möglich erledigt werden sollte oder kann es warten, bis ich zufällig eine unbenutzte Einheit finde?

    
Daniel Rikowski 18.04.2009, 18:01
quelle

5 Antworten

14

Wenn es an anderer Stelle im Projekt verwendet wird, wird es keinen großen Unterschied machen, außer dass sauberer Code erstellt wird, der einfacher zu lesen ist. Es gibt jedoch ein paar kleinere Dinge, die es beeinflussen könnten.

Kompilierreihenfolge: Der Compiler entscheidet, in welcher Reihenfolge Einheiten zusammengestellt werden, basierend darauf, welche Einheiten welche Einheiten verwenden. Wenn Sie eine Einheit aus der uses-Klausel einer frühen Einheit entfernen, kann dies dazu führen, dass die verwendete Einheit später im Kompilierungszyklus kompiliert wird. Das klingt vielleicht nicht nach viel, aber bedenken Sie, dass initialization Abschnitte in der gleichen Reihenfolge laufen, in der die Einheiten kompiliert wurden. Dies sollte jedoch für Ihr Projekt eigentlich keinen großen Unterschied machen.

CodeInsight: Wenn Sie die Dropdown-Liste für die Code-Vervollständigung aufrufen, wird eine Auswahl basierend auf allen derzeit verfügbaren Einheiten angeboten. Sie können die Anzahl der zu filternden Optionen reduzieren - und somit die Zeit, die benötigt wird, um das verdammte Ding hochzuziehen - indem Sie die Anzahl der verwendeten Einheiten reduzieren. (Nein, ich bin nicht bitter. Warum fragst du?)

    
Mason Wheeler 18.04.2009, 18:16
quelle
9

Im Allgemeinen keine. Wenn eine Einheit einmal im gesamten Projekt verwendet wird, spielt es keine Rolle, wie oft sie verwendet wird. Umgekehrt spielt es keine Rolle, an wie vielen Stellen eine Einheit entfernt wird, wenn sie irgendwo noch einmal benutzt wird. Das kompilierte Programm wird sich gleich verhalten und wird ungefähr die gleiche Größe haben.

Der einzige Unterschied liegt in der Reihenfolge der Initialisierungs- und Finalisierungsabschnitte der Einheit. Die Einheitsnutzungsreihenfolge beeinflusst die Reihenfolge, in der diese Abschnitte ausgeführt werden, obwohl der genaue Effekt niemals dokumentiert wurde (versuchen Sie also nicht, sich auf die Reihenfolge der Initialisierung zu verlassen).

Aber ich ermutige Sie trotzdem, Ihre Einheitenlisten aufzuräumen, aus demselben Grund, aus dem Sie aufgefordert werden, Ihre Variablenlisten und Ihre Parameterlisten zu bereinigen. Wenn Sie das nicht benötigte Material loswerden, wird es einfacher, den Code zu lesen, den Sie behalten haben, weil Sie einigermaßen sicher sein können, dass das, was Sie gerade lesen, ein genaues Bild davon liefert, was der Code tut. Wenn Ihr Code eine Reihe von Einheiten erwähnt, diese aber nie wirklich nutzt, werden Sie beim nächsten Mal, wenn Sie oder jemand anderes den Code betrachtet, eine gute Änderung vornehmen, um herauszufinden, wo Ihr Code die Funktionen verwendet dieser Einheiten. (Sie sagen sich selbst: "Hmm, dieser Code enthält Graphics , aber ich kann nicht sehen, wo er etwas zeichnet. Ich würde besser einen anderen Blick darauf werfen, weil ich nicht dachte, dass dieser Code irgendeine Verantwortung hätte Hey, Kollege - kannst du dir etwas Zeit nehmen, um mir zu sagen, wo diese Einheit Sachen zeichnet? ")

    
Rob Kennedy 18.04.2009 18:23
quelle
5

Ja, es gibt einen Trick , der oft übersehen wird und dich in den Rücken beißen kann:
Wenn es einen Initialisierungs- / Finalisierungs -Code gibt, wird immer ausgeführt , auch wenn in Ihrer Unit kein Code aufgerufen wird (und die -Einheit ist immer enthalten ). stark, während du denkst, dass es nicht geht). Wenn Sie also eine Einheit entfernen, die Sie in Ihrem Projekt nicht benötigen, kann dies einen erheblichen Unterschied ausmachen.

Bemerkenswert ist auch, dass die Reihenfolge der Einheiten bestimmt, welche Kennung der Compiler wählt, wenn es Homonyme in zwei verschiedenen Einheiten gibt und Sie sie ohne Präfix aufrufen der Gerätename (den Sie immer als Best Practice verwenden sollten).

Abgesehen davon haben, wie Mason und Rob gezeigt haben, die Reihenfolge der Einheiten die Reihenfolge, in der sie kompiliert werden, und die Reihenfolge der Initialisierung / Finalisierung.

Was den Code-Einblick anbelangt, wird es schneller, wenn Sie unnötige Einheiten entfernen, aber auch global, wenn alle im Projekt verwendeten Einheiten explizit zum dpr hinzugefügt werden, anstatt sich auf den Suchpfad zu verlassen, um sie implizit zu finden hinzugefügt durch eine andere Einheit.

    
François 18.04.2009 19:47
quelle
5
Ich stimme strongly mit Mason und Rob überein: es macht einen Unterschied!

Abhängigkeitsreduktion.

Der Unterschied ist nicht in dem aktuellen Projekt, wie es von Mason und Rob erklärt wurde. Der Unterschied liegt stattdessen in Ihrem NEXT-Projekt. Wenn Sie die unnötigen (Server-) Einheiten in Ihrer (Client-) Einheit beibehalten, werden die Abhängigkeiten ebenfalls mit dieser Client-Einheit in einem anderen Projekt erfasst. Wenn es keine anderen berechtigten Client-Einheiten für die gerade eingezogenen Einheiten gibt, haben Sie Bloat hinzugefügt.

    
user93066 20.04.2009 09:32
quelle
4

Verwenden Sie den kostenlosen Pascal Analyzer, um nicht verwendete Einheiten in Ihrem Code zu finden.

    
dwrbudr 18.04.2009 19:19
quelle

Tags und Links