2009-05-22 14 views
24

Ho alcuni progetti Delphi di grandi dimensioni (~ 600k linee di codice). Includono alcuni componenti personalizzati sviluppati dal nostro team.Prestazioni di completamento del codice Delphi

Spesso, quando richiamo il completamento del codice con ctrl + spazio o semplicemente premendo ".", L'IDE si blocca e ci pensa duramente per molto tempo. A volte il ritardo può essere un minuto intero, o più. Altre volte, si apre immediatamente con suggerimenti.

Quali fattori influenzano le prestazioni di intellisense in Delphi? C'è un modo per migliorare questa performance?

La mia soluzione migliore finora è disattivare il completamento automatico e usare ctrl + spazio quando ho bisogno di meditare tranquillamente per un minuto o così.

Non posso fare a meno di ricordare che VS2005, VS2008 e XCode sembrano dare un feedback intellisense praticamente istantaneo (anche se non l'ho mai provato su un progetto così grande).

In alternativa, I've offered this suggestion.

+0

questo mi interessa molto. Ricordo che il. o Ctrl + Spazio utilizzato per funzionare perfettamente diversi anni fa. Penso che fosse Delphi 7, certamente Delphi 5, in cui il ritardo era appena distinguibile. Lo amavo. Ma poi è arrivata la D2005 e in quel momento ho avuto terribili problemi con questa funzione. Cosa è cambiato? Perché l'hanno cambiato? –

+2

Buona domanda.È diventato quasi inutilizzabile per me in progetti di grandi dimensioni - a malincuore l'ho spento ed è un peccato perché l'aiuto online è bizzarro, distratto e ingombrante - di solito è più veloce/più diretto a Google per un aiuto in tutta onestà. Mi piacerebbe essere in grado di usare di nuovo Ctrl-Space, è stato molto utile. – robsoft

risposta

7

Assicurarsi di includere esplicitamente tutte le unità (*) utilizzate dal progetto nel dpr.
Non fare affidamento sul percorso di ricerca per trovare un'unità chiamata da un'altra unità, aggiungerla al dpr. Il dpr sarà molto più lungo ma tutte le cose relative alla compilazione saranno più veloci, incluso il codice-insight.

(*) non le unità dei componenti installati.

+0

Questo in realtà sembra aiutare un bel po '... ctrl + f12 visualizza un elenco sgradevole di unità che non sono specifiche del progetto ... ma posso conviverci. – JosephStyons

+1

Oltre ai percorsi di ricerca all'interno del progetto, gli altri ritardi terribili entrano se si dispone di un percorso Biblioteca gigante. –

+0

Ciò che mi ha aiutato molto nel caso simile - per ** rimuovere unità inutilizzate ** da "usa" sezioni e spostare unità ovunque sia possibile da "interfaccia" a "implementazione". Il tempo di compilazione del progetto 346kLoc è passato da 70 secondi a 8,8 secondi. Questo ha influenzato direttamente il completamento del codice. Ora è quasi istantaneo. – Kromster

3

Questo è un problema di vecchia data con Delphi e ho dovuto ricorrere a disattivare il completamento automatico. Dopo aver lavorato in quel modo per un po ', sono rimasto molto soddisfatto. Anche se richiede solo una frazione di secondo, con l'IDE in ritardo la mia digitazione è stata sconcertante e ha interrotto il mio flusso. Molto più bello con gli automatici, IMO.

+0

non può essere d'accordo con non usare 'gli automatismi' ... –

+1

MasterPeter: ognuno al suo, temo. Quando so cosa voglio, sono molto più veloce a digitarlo piuttosto che avere una pausa e poi scegliere. Quando non so cosa voglio, certamente lo so, e sono perfettamente in grado di digitare Ctrl + Spazio per ottenere aiuto. – dwc

+0

Su piccoli progetti, l'ho trovato eccellente; una volta che ho appreso come funziona, posso utilizzare i modelli di codice e il completamento automatico a grandi vantaggi. Ciò rende le prestazioni scadenti in un grande progetto ancora più frustrante. – JosephStyons

14

Delphi Code Insight richiama la DLL del compilatore per eseguire una compilazione personalizzata quando l'utente richiede Code Insight (Ctrl + Spazio, '.', Ecc.). Questa compilazione personalizzata crea una build nell'unità e salta oltre codegen, linking, ecc. Fino a raggiungere il tuo attuale offset nel buffer dei file. Con questo in mente, l'elenco delle unità che il compilatore vede prima di arrivare alla tua posizione corrente giocherà un grosso fattore nel determinare la velocità dell'operazione Code Insight. Potrebbero esserci unità (o più unità) che causano una forte dipendenza dal file system, ecc. È piuttosto possibile riordinare la clausola uses, refactoring della clausola uses in più file o rimuovere unità nella clausola uses che non è " Se necessario, la compilazione dell'unità corrente potrebbe migliorare le prestazioni. Inoltre, l'utilizzo di pacchetti o l'accorciamento del percorso di ricerca dell'unità possono migliorare i tempi di risposta dell'elemento della configurazione.

+1

Risposta interessante, grazie! Qualche spunto di riflessione lì. :-) – robsoft

+1

Questo è davvero interessante ... ma dovrei sottolineare che un FULL BUILD dell'applicazione (con il nostro famoso compilatore veloce, yay) dura circa 1 minuto ... e il completamento del codice richiede più tempo di quello . – JosephStyons

+0

Se si esegue una ricostruzione completa (che genera .dcus su disco), ciò aiuta le prestazioni dell'elemento della configurazione? Inoltre, usi i pacchetti o è un exe monolitico? –

4

Non so quale versione si utilizza, ma il completamento del codice molto più veloce è una delle cose che mi piace di più di Delphi 2009.

+0

Buono a sapersi. Sono attualmente su d2007 – JosephStyons

0

Ti includere le directory fonti per le vostre squadre componenti personalizzati di essere in il percorso della biblioteca? Sarebbe interessante vedere la differenza di velocità se solo i file DCU dei componenti si trovano nel percorso della libreria, invece di avere i file di origine anche lì.

+0

Sì, i percorsi di origine per i componenti personalizzati sono lì. Proverò a provare solo con dcu-only – JosephStyons

+0

Ho provato solo i percorsi DCU, e non sembra aver cambiato le prestazioni di intellisense. – JosephStyons

0

Mi sono imbattuto in questo problema, l'ho risolto rimuovendo un collegamento di rete morto dal percorso della mia libreria di ambiente. Risolto il mio problema al 100%.

Problemi correlati