Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [DELPHI] Debug o Release

    Sto lavorando da un po' con Delphi ed ho notato una cosa.
    L'eseguibile della mia ultima applicazione occupa circa 1,5 Mb perchè include la libreria di ADO.

    Però in C++ hai modo di scegliere di effettuare un build in versione debug o release (o addirittura personalizzarlo) in modo da includere o meno i riferimenti al codice per il debug o meno.

    Sapete se questa cosa è fattibile anche con Delphi per ridurre un po' il mio eseguibile?

    Ciao.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Dimensioni dell'eseguibile...

    Quando compili un programma Delphi, ottieni il massimo dell'ottimizzazione possibile nella creazione dell'eseguibile.

    L'eccedenza di spazio può essere dovuta ad un buon numero di risorse grafiche eventualmente integrate nel programma, oppure ad un alto numero di package utilizzati (controlli aggiuntivi, componenti speciali, ecc.)

    Prova a compilare il progetto specificando Build with runtime packages nella finestra delle opzioni di progetto, alla pagina Packages. Se le dimensioni non diminuiscono sensibilmente, allora il problema della grandezza del file può essere riconducibile ad altri fattori.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Ottimo...
    Il mio eseguibile è passato da 1190Kb a soli 54Kb!!
    Semplicemente fleggando (come hai indicato) "Build with runtime packages".
    Da quello che ho capito per default viene incluso nell'eseguibile quasi tutto... ma molte cose spesso non servono!

    Ciao e grazie mille!

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Runtime packages 2 - la vendetta

    Mmm...in realtà è il contrario! Come ti ho detto, Delphi è un grande ottimizzatore: anche se fai uso di unit su unit, di package e quant'altro, Delphi è talmente abile da prelevare dai file sorgente solo lo stretto necessario per il funzionamento della tua applicazione; ad esempio, può prendere solo il codice di una classe, solo una procedura...insomma, solo ciò di cui la tua applicazione ha strettamente bisogno.

    Probabilmente, i componenti del package ADO sono abbastanza pesanti in sè; attivare l'opzione Build with runtime packages significa evitare di compilare tutto il codice sorgente Object Pascal che implementa i componenti ADO all'interno della tua applicazione...i componenti verranno lasciati nei "package", che altro non sono che particolari forme di DLL, che dovrai però allegare al tuo progetto quando ti accingerai ad installarlo su una nuova macchina.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    In effetti me ne sono accorto!
    In realtà mi sembrava strano che in pochi 54Kb ci fossero anche le librerie di ADO.
    Prima avevo il vantaggio che su qualsiasi macchina in rete copiavo l'eseguibile... tutto funzionava.
    Adesso no!! Dice che mancano alcuni file bpl.
    Ho defleggato "Build with runtime packages" ma la cosa non è tornata alla normalità.
    Cosa posso fare per tornare alla situazione iniziale?

    Grazie

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Package...

    Tutti i componenti disponibili in Delphi sono implementati in moduli (unit) che vengono riassemblati in package installati nell'ambiente Delphi. Quando si posizionano questi componenti sul form, Delphi aggiunge il nome della unit alla clausola uses per tenere traccia dei tipi: le classi dei componenti.
    Compilare un programma senza utilizzare l'opzione Build with runtime packages significa prendere ciascun file sorgente del progetto, trovare i file sorgente collegati e unirli in un solo grande "calderone": tutto ciò che serve all'applicazione viene compilato assieme ad essa, mentre il resto non viene nemmeno preso in considerazione (basta notare i pallini blu a fianco delle righe di codice).
    Se si fa uso dell'opzione Build with runtime packages, si evita la compilazione delle unit all'interno del programma, ma si fa in modo che l'applicazione si colleghi dinamicamente al package che contiene tali unit in forma compilata (i BPL, Borland Package Library) per l'appunto) con il risultato che l'eseguibile viene notevolmente ridotto, ma necessità della presenza dei file BPL sulla macchina ospite per potersi collegare alla libreria e funzionare correttamente.

    La scelta al programmatore... :quipy:

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Ok... perfetto. Innanzi tutto ti ringrazio per la tua gentilezza e chiarezza nello spiegare.
    Ora volevo però capire come posso risolvere il mio problema (venutosi a creare ieri dopo la "prova del flag") a prescindere dalla scelta delle due soluzioni.
    Ovvero...

    1) Se decidessi di NON fleggare "Build with runtime packages" e creare quindi un gran file che contenga tutto, come posso adesso ripristinare la situazione, visto che nonostante l'abbia rifleggato continua a dirmi che non trova vari file bpl (logicamente su altre macchine e non quella di sviluppo)?

    Cosa più interessante...
    2) Se invece decidessi di fleggare "Build with runtime packages" c'è un modo per capire quali file bpl fornire insieme al "misero" eseguibile? In pratica ad un client cosa devo fornire oltre all'eseguibile per far funzionare il tutto? Non vorrei creare pacchetti di installazione; è per questo che avevo optato per la prima soluzione. Se proprio va creata invece una cosa del genere... spero non assomiglino a quelli di casa Microsoft!

    Ciao e buon lavoro.

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Installazione e altro...

    Il motivo per cui non riesci a tornare alla soluzione originale sinceramente non lo so. Hai provato a fare nuovamente un "build" della tua applicazione? Vai nel menu Project e scegli la voce Build <nome progetto>. Il problema dovrebbe risolversi.

    Nel secondo caso, per conoscere i BPL di cui hai bisogno è sufficiente andare nel pannello "Packages", lo stesso che contiene il flag "Build with runtime packages". Togli il simbolo di spunta da tutti i package che non utilizzi e dovresti vedere la casella di testo con l'elenco dei runtime package che viene "sfoltita".
    Quando hai lasciato solo quelli che ti servono, cerca i file .BPL che corrispondono ai nomi dei runtime package rimasti: quelli sono i file che ti servono.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9

    Allora...

    Vediamo di capire un po'...

    Con "Build with runtime packages" ha creato un exe di 87 Kb ma questo è tutto ciò che ho dovuto portare nella sua directory (con le dimensioni in byte):

    adortl60.bpl 148.480
    bdertl60.bpl 222.208
    dbrtl60.bpl 254.464
    miotool.exe 89.088
    qrpt60.bpl 521.728
    qtintf.dll 4.142.592
    rtl60.bpl 637.440
    vcl60.bpl 1.324.032
    vcldb60.bpl 262.656
    vclx60.bpl 213.504

    Quindi mi ritrovo che per far funzionare il tool devo copiare su ogni mio client una directory di circa 7,45 Mb.
    Prima invece fleggando "Build with runtime packages" avevo un file di 1,2 Mb che funzionava ovunque lo copiassi.

    Il problema è che non riesco a tornare alla situazione di prima? Se fleggo mi dice che manca qtintf.dll.
    E' sottinteso che il problema è dovuto alla mia particolare necessità di non voler creare un pacchetto di installazione.

    Grazie.

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Disabilita l'opzione...

    Se vuoi tornare alla condizione iniziale, togli il segno di spunta dalla casella Build with runtime packages e compila nuovamente il progetto selezionando espressamente la voce di menu [Project][Build...] (forza la ricompilazione delle singole unit ricreando anche i file DCU).

    Se questo non funziona o hai ancora dipendenze da file esterni, probabilmente hai fatto uso di qualche particolare soluzione all'interno del tuo file eseguibile (controlli ActiveX, librerie...) che fanno riferimento comunque a file esterni all'applicazione.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.