2009-04-18 12 views
7

Personalmente mi piace se le mie clausole uses sono le più piccole possibili, ma in molte applicazioni le unità veramente grandi (in termini di espansione dell'eseguibile) come Forms o VirtualTrees sono comunque necessarie in almeno un'altra unità.Fa la differenza se pulisco la mia clausola di utilizzo se le unità rimosse sono ancora utilizzate in altre unità?

Quindi: fa la differenza se pulisco le mie clausole uses anche se alla fine nessuna unità viene rimossa dal progetto? Se è così: in che modo? E: Sta pulendo la clausola uses qualcosa che dovrebbe essere fatto il prima possibile o può aspettare finché non trovo per caso un'unità inutilizzata?

risposta

14

Se è utilizzato altrove nel progetto, non farà molta differenza, tranne che per produrre codice più pulito che è più facile da leggere. Ci sono alcune piccole cose che potrebbero influenzare, però.

Ordine di compilazione: il compilatore decide quale ordine compila le unità in base a quali unità utilizzano quali unità. Se si rimuove un'unità dalla clausola uses di una delle prime unità, ciò potrebbe causare la compilazione dell'unità utilizzata in un secondo momento nel ciclo di compilazione. Potrebbe non sembrare molto, ma tieni presente che le sezioni di inizializzazione vengono eseguite nello stesso ordine in cui sono state compilate le unità. Questo però non dovrebbe fare molta differenza per il tuo progetto.

CodeInsight: quando si apre il menu a discesa completamento codice, offrirà le scelte in base a tutte le unità attualmente disponibili. Puoi ridurre il numero di scelte da filtrare e quindi il tempo necessario per tirare su la cosa insanguinata! - riducendo il numero di unità che stai utilizzando. (No, non sono amaro Perché lo chiedi?)

+0

* Il compilatore decide quale ordine compilare le unità in base a quali unità utilizzano quali unità. * La complessità di tale calcolo diminuisce, quindi il tempo. Ma non notoriamente, immagino. –

9

Generalmente no. Se un'unità viene utilizzata una volta, in qualsiasi punto del progetto, non importa quante più volte viene utilizzata. Al contrario, non importa quanti posti rimuovi una unità se è ancora utilizzata almeno una volta da qualche parte. Il programma compilato si comporterà allo stesso modo e avrà approssimativamente le stesse dimensioni.

L'unica differenza sarebbe nell'ordine delle sezioni di inizializzazione e di finalizzazione dell'unità. L'ordine di utilizzo dell'unità influenza l'ordine in cui sono eseguite tali sezioni, sebbene l'effetto preciso non sia mai stato documentato (quindi cerca di non fare affidamento sull'ordine di inizializzazione).

Tuttavia, vi incoraggio comunque a ripulire gli elenchi delle unità, per lo stesso motivo per cui siete incoraggiati a pulire gli elenchi di variabili e gli elenchi di parametri. Quando ti libererai delle cose che non ti servono, ti sarà più facile leggere il codice che hai conservato perché puoi essere ragionevolmente sicuro che ciò che stai leggendo fornisce un'immagine precisa di ciò che fa il codice. Se il tuo codice menziona un gruppo di unità ma non le utilizza mai veramente, la prossima volta che tu o qualcun altro guardi il codice, c'è una buona possibilità che passi un po 'di tempo a cercare dove il tuo codice utilizza le strutture di quelle unità. (Dirai a te stesso: "Hmm, questo codice include Graphics, ma non riesco a vedere dove disegna nulla, dovrei dare un'altra occhiata, perché non pensavo che questo codice avesse delle responsabilità del genere. , collaboratore: puoi dedicare un po 'di tempo alla tua giornata per dirmi dove questa unità disegna cose? ")

4

Utilizzare l'analizzatore Pascal gratuito per individuare le unità inutilizzate nel codice.

+3

In realtà, penso che intendi suggerire di usare ICARUS per trovare le unità inutilizzate nel tuo codice. Dalla stessa compagnia. – Mick

+3

http://www.peganza.com/products_icarus.htm – Mick

5

Sì, c'è un trucco che viene spesso trascurato e può venire mordere nella parte posteriore:
Se c'è qualche/finalizzazione del codice di inizializzazione, si viene sempre eseguito anche quando non esiste un codice altrimenti chiamato nella vostra unità (e l'unità è sempre inclusa nello mentre pensereste che non lo sarebbe). Quindi, rimuovere un'unità che non è necessaria nel tuo progetto può fare una differenza notevole.

Un altro aspetto degno di nota è che l'ordine delle unità determina quali l'identificatore del compilatore raccogliere s quando ci sono omonimi in 2 diverse unità e si chiamano loro, senza prefisso con il nome dell'unità (che si dovrebbe sempre fare come una buona pratica).

Oltre a ciò, come hanno sottolineato Mason e Rob, l'ordine delle unità influisce sull'ordine in cui sono compilati e sulla sequenza dell'inizializzazione/completamento.

Per quanto riguarda l'analisi del codice, sarà più rapido rimuovere unità non necessarie, ma globalmente se tutte le unità utilizzate nel progetto vengono aggiunte esplicitamente al dpr invece di fare affidamento sul percorso di ricerca per trovarle quando sono implicitamente aggiunto attraverso un'altra unità.

+0

Ma dov'è il limite per aggiungere un riferimento al file del DPR? Voglio dire che non aggiungi VCL standard come Classi e Dialoghi. Che dire dei componenti di terze parti o dei propri componenti? Il mio progetto è enorme e voglio ancora un controllo rapido dei codici. –

+0

Come regola generale, aggiungo in dpr tutte le unità che non fanno parte del VCL/componenti di terze parti installati. Quelli vengono con il percorso della Libreria. Tutto il resto viene aggiunto esplicitamente in modo da non aver davvero bisogno del percorso di ricerca. Naturalmente, YMMV, specialmente se si compongono tutto e il resto ... :) –

5

I stronlgy non sono d'accordo con Mason e Rob: fa la differenza!

Riduzione delle dipendenze.

La differenza non è nel progetto corrente, come spiegato da Mason e Rob. Invece, la differenza è nel tuo progetto NEXT. Se mantieni le unità (server) non necessarie nella tua unità (client), allora l'utilizzo di quell'unità client in un altro progetto attiverà anche le dipendenze. Se non ci sono altre unità cliente giustificate per le unità appena tirate, allora hai aggiunto un aumento.

+0

Abbastanza giusto, ma ci sono 2 cose da tenere a mente. In primo luogo, stava parlando specificamente di unità che sono usate altrove nel progetto. Ovviamente quello che dici è corretto, ma non rientra nello scopo della domanda. In secondo luogo, il bloat delle dipendenze non è un grosso problema poiché il linker intelligente in genere può eliminare completamente un'unità inutilizzata, a meno che non si trovi nella sezione di inizializzazione, nel qual caso eliminerà solo * la maggior parte * dell'unità inutilizzata. –