Domanda

Che cosa fate per aumentare la velocità di avvio (o per diminuire il tempo di avvio) della vostra Delphi app?

Oltre specifica applicazione, c'è un trucco standard che funziona sempre?

Nota: Non sto parlando di algoritmi veloci o simili. Solo l'incremento di prestazioni in fase di avvio, in termini di velocità.

È stato utile?

Soluzione

Prova a fare il meno possibile nel caso in OnCreate del form principale . Piuttosto spostare alcuni inizializzazione di un metodo diverso e farlo una volta che il modulo è mostrato all'utente. Un indicatore che l'applicazione è occupato con un cursore del mouse occupato va un lungo cammino.

Gli esperimenti fatti dimostra che se si prende la stessa applicazione esatto e sufficiente aggiungere una notifica di avvio ad esso, gli utenti in realtà percepiscono che app come avvio più veloce!

Oltre a questo si possono fare le solite cose come escludere le informazioni di debug e consentire l'ottimizzazione nel compilatore.

In cima a quello, non automaticamente creare tutte le forme . Crearli in modo dinamico quando ne hai bisogno.

Altri suggerimenti

Nelle opzioni del progetto, non creare automaticamente tutte le forme in anticipo. Creare e liberarli, se necessario.

Bene, come Argalatyr mi ha suggerito di cambiare il mio commento ad una risposta separata:

Come estensione per la risposta "non auto creare forme" (che sarà molto efficace da solo) vi suggerisco di ritardare l'apertura di connessioni a database, internet, server COM e qualsiasi dispositivo periferico fino al momento prima.

accadono tre cose prima che venga visualizzato il modulo:

  1. blocchi All 'inizializzazione' in tutte le unità vengono eseguiti in ordine "prima visto".
  2. vengono create tutte le forme create automaticamente (caricati da file DFM ed il loro gestore OnCreate si chiama)
  3. viene visualizzato sotto forma principale (OnShow e OnActivate si chiamano).

Come altri hanno fatto notare, si dovrebbe auto-creare un solo piccolo numero di forme (soprattutto se sono forme complicate con un sacco di componente) e non dovrebbe mettere lunga elaborazione in eventi onCreate di quelle forme. Se, per caso, il modulo principale è molto complicata, si dovrebbe ridisegnare esso. Una possibilità è quella di dividere principale forma in più frame che vengono caricati su richiesta.

E 'anche possibile che uno dei blocchi di inizializzazione sta prendendo del tempo per eseguire. Per verificare, mettere un punto di interruzione sulla prima riga del programma (blocco principale 'BEGIN..END' nel file .dpr) e avviare il programma. Tutto blocco di inizializzazione viene eseguito e quindi il punto di interruzione si fermerà l'esecuzione.

In modo analogo si può fare un passo (F8) il programma principale -. Vedrete quanto tempo ci vuole per ogni forma di auto-creato per essere creato

Visualizza una schermata iniziale, così la gente non notare i tempi di avvio lunghi:.)

codice più veloce - è il codice, che non si esaurisce mai. Abbastanza ovvio, davvero;)

Distribuzione dell'applicazione può (e di solito fa!) Avvenire in modi lo sviluppatore non può aver considerato. Nella mia esperienza questo genera più problemi di prestazioni di chiunque vorrebbe.

Un collo di bottiglia comune è l'accesso ai file - un file di configurazione, il file ini che è necessario per avviare l'applicazione in grado di funzionare bene su una macchina di sviluppo, ma svolgere abissalmente in diverse situazioni di distribuzione. Allo stesso modo, la registrazione applicazione può impedire le prestazioni - sia per motivi di accesso ai file di log o la crescita di file.

Quello che vedo così spesso sono applicazioni rich client distribuiti in un ambiente Citrix o su un'unità di rete condivisa, dove la squadra infrastrutture decide che l'utente file temporanei o file personali sono memorizzati in una posizione che l'applicazione trova problemi con, e questo porta a problemi di prestazioni o di stabilità.

Un altro problema Vedo spesso che interessano le prestazioni delle applicazioni è il metodo utilizzato per importare ed esportare dati in file. Comunemente nelle applicazioni di business Delphi vedo funzioni di esportazione che lavorano fuori DataSet - l'iterazione e la scrittura di file. Prendere in considerazione il metodo usato per scrivere su file, prendere in considerazione la memoria disponibile, si consideri che la 'cartella' in fase di scrittura / lettura dal può essere locale alla macchina, o può essere su un server remoto.

Uno sviluppatore può sostenere che si tratta di problemi di installazione, al di fuori della portata della loro preoccupazione. Io di solito vedo molti cicli di analisi sviluppatore su questo tipo di problema prima che venga identificato come un 'problema delle infrastrutture'.

  • La prima cosa da fare è quello di cancellare automaticamente Lista forme creato (cercare Progetto Opzioni). Creare moduli al volo quando necessario, soprattutto se il applicazione utilizza connessione al database (Datamodule) o forme che includono pesante uso di controlli.
  • Considerare tramite il modulo di successione anche per diminuire le dimensioni exe (utilizzo delle risorse è mimized)
  • Ridurre il numero di forme e fondere funzionalità simili o corrispondenti in forma singola

Mettere attività in esecuzione lunghi (connessioni di database aperti, collegarsi al server app, ecc) che devono essere eseguiti all'avvio in un thread. Qualsiasi funzionalità che dipende da questi compiti sono disabilitati fino a quando il filo è fatto.

E 'un po' di trucco, però. La principale forma arriva subito, ma si sta dando solo l'aspetto del tempo di avvio più veloce.

comprimere il file eseguibile e le DLL utilizzando qualcosa di simile a ASPack o UPX . tempo di decompressione è più che compensato dal tempo di caricamento più veloce.

UPX è stata utilizzata come esempio di come caricare Firefox più veloce.

Si noti che ci sono aspetti negativi href="https://stackoverflow.com/questions/353634"> exe compressione.

Questa è solo per l'IDE, ma Chris Hesick fatto un post blog su aumentando le prestazioni di avvio nel debugger .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top