2009-12-14 10 views
9

Ho una domanda circa la possibilità in Delphi di costruire con o senza pacchetti di runtime (Progetto-> Opzione> Packages).
La dimensione del file eseguibile sembrano essere più piccola (389KB) quando ho controllato la casella "Costruire con i pacchetti runtime" Rispetto a quando ho deselezionare la casella (3,521KB). Perché è così?Perché costruire con i pacchetti runtime Crea file più piccolo il file EXE?

Ho così tanti problemi a creare un disco di installazione per questo e non riesco a capire quali file dovrebbero essere inclusi nell'installazione. Mi chiedo se questo potrebbe avere qualcosa a che fare con esso, ma ho già provato entrambe le opzioni.

+1

Sono curioso anche di questo. Io uso EurekaLog, e la sua capacità di perdita di memoria non funziona a meno che non si costruisca senza pacchetti di runtime. Così ho trascorso alcuni giorni eliminando la necessità. Quindi, per aggiungere alla tua domanda, sono anche curioso di sapere se vale la pena costruire WITH WITH i pacchetti di runtime per una build di debug, e WITHOUT per una build di rilascio, e se sì, come può essere fatto? – lkessler

risposta

14

Quando si creano con i pacchetti di runtime, VCL e RTL vengono caricati dai pacchetti e quindi il loro codice non deve essere collegato nel file EXE. Quindi il file EXE diventa più piccolo, ma l'installazione totale diventa più grande dal momento che non è possibile utilizzare Collegamento intelligente per ridurre le dimensioni dei pacchetti.

Come già notato, l'uso di pacchetti causa problemi di tracciamento della perdita di memoria e causa anche problemi di debugging. In genere, vale la pena usarli solo se si utilizzano plug-in che richiedono anche pacchetti di runtime.

+5

È anche utile se si stanno eseguendo molte applicazioni diverse su una macchina che utilizzano tutte la VCL - non ha senso caricarla in memoria più volte. –

+1

+1 E anche nel secenario in cui i plug-in potrebbero averne bisogno, è quasi sempre meglio progettarli per non richiedere pacchetti di runtime. Perché quei plugin si sono spezzati tutti quando hai costruito l'app in una versione di Delphi più recente, iow: non potresti mai eseguire l'aggiornamento a strumenti più recenti, e gli autori dei plugin potrebbero non farlo. –

+1

Solo che con gigabyte di RAM sulla maggior parte dei PC, il disturbo da problemi di versione e l'idea che una BPL sbagliato potrebbe essere caricato da qualche parte nel mio percorso (DLL hell == BPL inferno) tenere un sacco di gente da sempre voler utilizzare tale una tecnologia in pratica. La possibilità di eseguire interamente "side-along" sarebbe ottima, se si potesse fare affidamento sui BPL per caricare solo localmente e ignorando l'ambiente PATH di sistema. –

0

Non so su D2010, ma in D2006 esiste un'opzione nel menu progetto denominata "Informazioni per Nome progetto".

Questo mostrerà quali pacchetti sono inclusi dopo la compilazione.

Tuttavia, come ha affermato Mason, c'è poco vantaggio nell'usare pacchetti di runtime e non pochi svantaggi.

9

Le risposte fino ad ora mancano di un punto cruciale: i pacchetti di runtime sono utili allo stesso modo in cui le DLL sono utili se si dispone di una suite di applicazioni che lavorano insieme e vengono installate insieme. Ovviamente puoi collegare la VCL e le librerie di terze parti in tutti loro costruendole senza pacchetti, ma a seconda del numero di applicazioni e librerie utilizzate la dimensione di queste applicazioni combinate sarà maggiore della dimensione di esse create con i pacchetti di runtime più la dimensione di questi pacchetti di runtime. Questo renderà i pacchetti di installazione più grandi, che non è il grosso problema che era una volta.

Tuttavia, l'utilizzo di tutte queste applicazioni contemporaneamente allo comporta un carico molto più elevato per il sistema. Dal momento che ogni applicazione utilizza la propria copia della VCL e le altre librerie di tutto questo ha bisogno di essere caricato da disco in memoria, che provoca più di I/O. E poi ci saranno diverse copie in memoria, ognuna occupando spazio per il codice. Quando vengono utilizzati pacchetti di runtime, ciascuna applicazione avrà una propria area di memoria per i dati, ma condivideranno tutti la stessa copia del codice dei pacchetti in memoria.

Per una singola applicazione autonoma senza particolari esigenze, sicuramente senza pacchetti.

+0

Quanto 4 GB di memoria sono pieni? Comunque, si applica ancora un po ', perché la cache è anche la memoria, e piuttosto costosa. Tuttavia, penso che sia più un caso teorico, poiché non tutte le pagine di RTL/VCL saranno attive. –

+1

Beh, chiamami vecchio stile, ma avere abbastanza memoria non è un motivo sufficiente per sprecarlo. Questo tipo di pensiero ci ha portato allo stato pietoso del software che abbiamo oggi. La mia macchina corrente, dispone di 4000 volte la RAM e 20000 volte lo spazio di disco rigido rispetto al mio primo PC, ma ci si sente come la maggior parte di tutte queste risorse aggiuntive si sprecano ... – mghie

+0

Vengo da Chimica in origine, e non v'è alcun sostituto per la misurazione e un sentimento per le magnitudini. Quel senso è più forte della reazione "sprecata" dell'istinto. –

1

Uno dei motivi principali per l'utilizzo dei pacchetti di runtime è quando è necessaria la granularità del modulo per la distribuzione/aggiornamento su un supporto che non accetta file di grandi dimensioni, come un cavo con una larghezza di banda ridotta.

Poiché i pacchetti di runtime rimangono gli stessi fino a quando non si cambia la versione di Delphi - come per sempre per quelli ancora in D7 ;-) - consente di distribuire nuove versioni o nuove applicazioni senza il payload di RTL/VCL.

Ma come con le DLL, è necessario fare attenzione con il controllo delle versioni.

+0

Significa che se "Costruito con pacchetti di runtime", devo spedire i pacchetti separatamente? Scusa se questa è una domanda stupida. – Snackmoore

+1

Devi spedire i pacchetti con la tua applicazione e fare molta attenzione quando li installi per non sovrascrivere la versione più recente (gli update pack potrebbero anche aggiornare tehm). Si consiglia un buon programma di installazione che controlli correttamente le versioni. –

+1

snackmoore, la maggior parte degli sviluppatori Delphi non creerebbe mai pacchetti di runtime su una build finale che viene spedita ai clienti, a meno che non vogliano rendere il proprio lavoro più difficile. I pacchetti BPL ti rendono la vita più difficile, a meno che tu non ne abbia davvero bisogno per qualche motivo (le altre risposte ti spiegano perché potresti averne bisogno), quindi non ne hai bisogno, quindi lascia perdere. –

3

Riguardo alla domanda "quali file devono essere inclusi nell'installazione": è possibile utilizzare Dependency Walker per rintracciare le dipendenze della libreria.

Problemi correlati