It is currently 9 June 2025, 8:11 Advanced search

"Ricompila tutto" troppo frequente

Questo forum è nato con lo scopo di raccogliere le proposte di modifica di Instant Developer e discuterne insieme.

"Ricompila tutto" troppo frequente

Postby s.zagni » 16 October 2014, 8:07

Buongiorno,

Ogni volta che si apre un progetto, alla compilazione viene impostato il flag ricompila tutto. Se chiudo INDE e riapro lo stesso progetto, alla compilazione reimposta di nuovo il flag ricompila tutto.

E' possibile implementare un controllo sulla data e ora di ultima modifica del progetto in modo tale che non venga ricompilato tutto ogni 3x2 (soprattutto per progetti di qualche centinaio di mb)?

Se chiudo il progetto e lo riapro dopo 5 minuti mi sembra strano che qualcosa sia cambiato... o non sono a conoscenza di qualche funzionamento?

Grazie

P.S. se tolgo il flag, ricompila tutto lo stesso...
s.zagni
 
Posts: 942
Joined: 9 April 2014, 8:33

Re: "Ricompila tutto" troppo frequente

Postby lucabaldini » 16 October 2014, 13:01

Non mi è chiaro. Forse, invece di "data e ora di ultima modifica del progetto" intendi "data e ora di ultima modifica della directory di output"?

Il ricompila tutto nasce dal fatto che non è semplice, appena avviato, sapere in che stato si trova la directory di output. Potrebbe essere stato eliminato qualcosa, oppure, ancora peggio, potrebbe esserci stata appena compilata una prova. Per esempio:
- apri InDe
- fai decine di modifiche
- compili
- chiudi InDe senza salvare

A questo punto se riapri il progetto e compili:
- il file IDP non è cambiato quindi InDe potrebbe pensare che tutto è già a posto
- la directory di output è appena stata "toccata" quindi InDe potrebbe pensare di non doverla ricompilare

Ma così facendo otterresti degli errori a run-time e l'app potrebbe anche non funzionare.

Secondo me è corretto che ad ogni riavvio di InDe, dato che non è noto lo stato della directory di output, che l'intera app venga ricompilata. Tieni conto che InDe sa se occorre o meno ricompilare ciascuna form... e quello stato dipende dalle modifiche fatte dall'apertura del progetto. Ora, se riapri il progetto, quella memoria non c'è più e InDe sa di dover compilare tutte le form. Quel ricompila tutto serve proprio a questo: a ricompilare tutte le form e tutti i componenti non potendo sapere lo stato della directory di output.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: "Ricompila tutto" troppo frequente

Postby s.zagni » 16 October 2014, 15:05

Potrebbe essere fattibile salvare sul progetto alcune info sui file generati?
Se faccio quello che dici

- apri InDe
- fai decine di modifiche
- compili
- chiudi InDe senza salvare


Quando riaprirai il progetto ci sarà il compila tutto perchè il progetto non è stato salvato. Se invece salvo il progetto, è possibile alla riapertura fare un controllo dei dati salvati con la directory di output (un CRC o qualcosa di simile)?
s.zagni
 
Posts: 942
Joined: 9 April 2014, 8:33

Re: "Ricompila tutto" troppo frequente

Postby lucabaldini » 16 October 2014, 15:32

Non è facile come chiedi. Tieni conto che alcuni file della directory di output cambiano. L'applicazione stessa, infatti, potrebbe generare, cancellare, cambiare dei file e InDe doverbbe memorizzarsi lo stato di tutti i file della directory di output e solo di quelli che ha generato lui. Inoltre le directory di output, molto spesso, contengono molto di più di quello che viene generato perché molti non usano bene la directory custom e incollano a mano i file necessari all'applicazione.

Ogni app è costituita da più di 500 file... dovrei memorizzare la data di ultima compilazione del file? E poi rigenerare il file solo se è cambiato dalla data memorizzata nel progetto? Non mi sembra una buona idea.

Però spiegami una cosa: perché ti dà fastidio il recompila tutto all'avvio di InDe? Non mi ha mai dato problemi. Anche su progetti corposi il "problema" si manifesta solo la prima volta che apri l'IDE. Se lavori tutta una giornata il problema non c'è più.
Non capisco il caso in cui il ricompila tutto dà fastidio.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: "Ricompila tutto" troppo frequente

Postby s.zagni » 16 October 2014, 15:53

Non è che da problemi. E' che su un pc non troppo potente, con un progetto abbastanza grande, tra un "Ricompila tutto" e un "Compila" passano la differenza è tra i 5 e i 10 minuti. Capita spesso che per crash di INDE o per bug (vedi viewtopic.php?f=5&t=64896) sono costretto a ricompilare tutto.
s.zagni
 
Posts: 942
Joined: 9 April 2014, 8:33

Re: "Ricompila tutto" troppo frequente

Postby lucabaldini » 16 October 2014, 16:29

InDe non crasha così spesso. Ho verificato tutti i crash generati dal tuo utente e sono, in tutto, 16 in 2 mesi. E sono quasi tutti doppi (crash, seguito da un altro crash a distanza di 1-2 minuti). Quindi non credo sia questa la causa principale del "fastidioso" ricompila tutto.

Il bug a cui fai riferimento modifica una videata quando sostituisci, nella sua query, una classe con un'altra. Perché il ricompila tutto è un problema in questo caso?

Forse, con un pc non troppo potente e un progetto abbastanza grande è meglio non uscire da InDe così spesso.

Comunque non credo che memorizzare tutto lo stato della directory di output all'interno del progetto sia la soluzione giusta.

Una cosa, però, potresti farla. Potresti controllare nel log di InDe dove viene impiegato il tempo per la compilazione del tuo progetto. Così possiamo capire dove vengono persi i 10 minuti di compilazione. Se non ricordo male, se il livello di LOG è maggiore di "transazioni aperte", vengono scritti nel file di LOG tutti i tempi di compilazione delle varie fasi (generazione sorgenti, estrazione componenti, compilazione in Java, etc...) così si può capire dove viene perso il tempo.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: "Ricompila tutto" troppo frequente

Postby manuel » 16 October 2014, 16:48

Non potrebbe essere sufficiente fare in modo che se si toglie il flag "ricompila tutto" inde non ricompili tutto comunque?
manuel
 
Posts: 416
Joined: 7 December 2010, 10:20

Re: "Ricompila tutto" troppo frequente

Postby lucabaldini » 17 October 2014, 7:03

Dipende cosa intendi per "ricompila tutto".
Ogni videata/classe/componente SA se deve essere ricompilata. All'apertura tutti gli oggetti hanno il flag attivo.
Poi, una volta compilati, il flag viene spento e viene riattivato solo se l'oggetto viene modificato.

Il flag che vedi nella videata di compilazione dice solo ad InDe "non guardare il flag dell'oggetto ma ricompila tutto comunque". Ora, se anche spegnessi quel flag, tutti gli oggetti si compilerebbero comunque. E farebbero bene dato che ciascun oggetto non può sapere in che stato è la sua "controparte" (che può essere composta di un file, o tanti file come nel caso dei componenti importati senza sorgenti). Prova a compilare un progetto, poi, una volta avviato, cancella qualche file nella cartella dei sorgenti e prova a ricompilare senza attivare il flag. Ottieni sicuramente degli errori. Lo stesso può succedere se rimuovi DLL, JAR, file accessori dell'applicazione, etc... Se lo fai quando InDe non è in esecuzione non è facile capire in che stato è la directory di output.

Prima di modificare un flag che, nella stragrande maggioranza dei casi risolve potenziali problemi nella directory di output, cercherei di capire dov'è davvero il problema. Se per compilare un progetto ci vogliono 10 minuti proverei a capire perché prima di stravolgere un algoritmo che, a mio parere, funziona bene. E le informazioni per farlo ci sono e sono nel LOG.

Ho creato l'attività NPQ02121 per tenere conto di questa conversazione. Quando verrà valutata, potrai seguirne l'andamento con Instant Developer Roadmap.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: "Ricompila tutto" troppo frequente

Postby s.zagni » 17 October 2014, 8:26

Ho compreso appieno le problematiche che ci sarebbero ad implementare questa cosa, e non volevo assolutamente forzare nessuno per implementarlo.

Per quanto riguarda il bug
Il bug a cui fai riferimento modifica una videata quando sostituisci, nella sua query, una classe con un'altra. Perché il ricompila tutto è un problema in questo caso?


Il problema è che se si sostituisce la classe, non è possibile selezionare alcune proprietà della classe sostituita perchè non vengono trovate. L'unica soluzione è chiudere e riaprire (con conseguente ricompila tutto). Sono d'accordo che non capita tutti i giorni però è abbastanza frustrante.

Una domanda anche se credo di sapere la risposta: il fatto che ci sia un log completo, potrebbe influire sulla velocità di compilazione?

Grazie per la disponibilità.
s.zagni
 
Posts: 942
Joined: 9 April 2014, 8:33

Re: "Ricompila tutto" troppo frequente

Postby lucabaldini » 17 October 2014, 9:29

Il log COMPLETO rallenta un po' il PC. Sul mio PC la differenza non è così grande, ma su PC un po' datati può rallentare eccome... Soprattutto se il progetto è grande. E soprattutto se durante la compilazione vengono generati tanti messaggi (che vengono scritti tutti nel LOG).

Io, di solito, lo tengo al livello "transazioni aperte". Quello dovrebbe essere un buon compromesso. Scrive poco ma scrive il giusto.

Il COMPLETO lo attivo solo in alcuni casi quando voglio capire esattamente cosa succede. Lì, per esempio, posso scroprire chi e perché modifica un certo oggetto durante una modifica. Non lo lascerei attivo durante l'aggiornamento delle librerie di un progetto in INGLESE avendo cambiato la lingua di InDe in ITALIANO. In quel caso gli oggetti modificati sono migliaia, e altrettante sono le righe che vengono scritte nel LOG. Come ti dicevo prima sul mio PC (che è abbastanza potente) il tempo totale aumenta di poco... su PC datati la differenza si può anche sentire.

Prova comunque a guardare dove viene perso il tempo a compilare. E' un'informazione interessante e per questo è sufficiente il livello "transazioni aperte".

Un'ultima cosa: riguardo il bug. Hai provato a ritirare la classe sulla query? Forse il secondo D&D ripristina le proprietà "perse". Oppure provando a chiudere il nodo dell'albero che contiene la videata e riaprirlo premendo CTRL. Il CTRL "forza" il ripopolamento di quel nodo (e tutti i figli) dell'albero... forse questo basta.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Next

Return to Proposte di modifica

Who is online

Users browsing this forum: No registered users and 12 guests

cron