Ricompilazione lenta a seguito di modifiche al progetto

mercoledì 19 giugno 2013 - 08.05
Tag Elenco Tags  C#  |  .NET 4.0  |  Visual Studio 2010

andrestu Profilo | Expert

Buongiorno a tutti,
ho una soluzione con diversi progetti (applicazioni web), uno di questi ha dei riferimenti ad altri progetti sempre all'interno della stessa soluzione.
Vorrei capire come migliorare il processo di modifica.
Il “problema” è che quando faccio qualche modifica e successivamente faccio il refresh della pagina con IE, devo attendere circa 10 secondi prima che la pagina venga aggiornata, anche se questo potrebbe sembrare un problema di poco conto vi assicuro che a lungo andare risulta essere abbastanza logorante.
Questa latenza di tempo non è dovuta alla Build la quale viene eseguita abbastanza velocemente, ma è dovuta alla ricompilazione dinamica che Aspnet esegue quando viene chiamata la pagina, praticamente il tempo impiegato per creare tutti quei file che vengono compilati dinamicamente nella cartella temporanea di esecuzione, quella relativa alla versione del .Net per intenderci.
Praticamente è come se ad ogni modifica aprissi il sito per la prima volta.
Ho notato che vengono ogni volta ricompilati sia i file del progetto corrente che non sono stati modificati, sia tutti quei file contenuti relativi alle dll degli altri progetti referenziati.
Vorrei sapere sostanzialmente se c’è un modo per evitare di ricompilare tutto, non ha senso !!!
Anche perché per il momento sono “solo” circa 10 secondi, ma se la soluzione dovesse ampliarsi prevedo un aumento esponenziale dei tempi di attesa.

Grazie


Andrea Restucci - Web Developer

alx_81 Profilo | Guru

>Buongiorno a tutti,
ciao

>Vorrei capire come migliorare il processo di modifica.
>Il “problema” è che quando faccio qualche modifica e successivamente
>faccio il refresh della pagina con IE, devo attendere circa
>10 secondi prima che la pagina venga aggiornata, anche se questo
>potrebbe sembrare un problema di poco conto vi assicuro che a
>lungo andare risulta essere abbastanza logorante.
Quello è perchè le dll allocate precedentemente vengono riallocate per farne, appunto, refresh. Capita anche se cambi il web.config.

>Vorrei sapere sostanzialmente se c’è un modo per evitare di ricompilare tutto, non ha senso !!!
>Anche perché per il momento sono “solo” circa 10 secondi, ma
>se la soluzione dovesse ampliarsi prevedo un aumento esponenziale
>dei tempi di attesa.
a parte il fatto che è il design di asp.net, ma perchè mai dovresti fare modifiche in produzione? A regime le modifiche dovrebbero calare no?
Sinceramente non vedo dei problemi in questa cosa.
Cerca di ridurre le dipendenze disaccoppiando il più possibile ed evitando che ogni modifica tocchi tutto.

>Grazie
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

andrestu Profilo | Expert

> a parte il fatto che è il design di asp.net, ma perchè mai dovresti fare modifiche in produzione?
infatti non parlo dell'ambiente di produzione ma di quello di sviluppo.

Se il progetto è di lieve entità il problema non si pone, più il progetto è complesso è maggiore è la lentezza di "aggiornamento", nel mio caso lavoro con un Solution al cui interno ci sono diversi progetti e in aggiunta credo che il rallentamento sia dovuto anche dal fatto che diverse pagine che sono soggette a compilazione vengono utilizzate come "embedded resources" (questo per condividerle tra progetti differenti) quindi compilate a loro volta come dll indipendenti.

Comunque nel frattempo ho fatto un pò di ricerca è ho trovato questo accorgimento, nel web.config sotto la sezione compilation:
optimizeCompilations="true"
devo dire che questo ottimizza i tempi, anche se ci sono alcune controindicazioni, ad esempio se faccio modifiche a qualche pagina configurata come "embedded resources" tali modifiche non vengono aggiornate, devo svuotare la cache manulamente, è comunque una lieve conseguenza visto e considerato che le modifiche a tali pagine sono molto ridotte.

Andrea Restucci - Web Developer

alx_81 Profilo | Guru

>Comunque nel frattempo ho fatto un pò di ricerca è ho trovato
>questo accorgimento, nel web.config sotto la sezione compilation:
>optimizeCompilations="true"
>devo dire che questo ottimizza i tempi, anche se ci sono alcune
>controindicazioni, ad esempio se faccio modifiche a qualche pagina
>configurata come "embedded resources" tali modifiche non vengono
>aggiornate, devo svuotare la cache manulamente, è comunque una
>lieve conseguenza visto e considerato che le modifiche a tali
>pagine sono molto ridotte.
In passato ho avuto soluzioni con 130 progetti, quindi tutt'altro che piccole, ma la modifica al sito non ha mai portato questo degrado di performance in compilazione, e credo proprio sia il disaccoppiamento.
Chiaramente se all'interno della tua applicazione web ci sono dei riferimenti forti a risorse che ogni volta devono essere ricompilate, capisco la lentezza. Anche le "embedded" che indichi sopra di certo fanno la loro parte, ma credo che tentare di modularizzare di più, isolando le varie classi, possa veramente aiutarti tanto.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5