2009-09-14 14 views
8

Attualmente sto lavorando con un CMS ASP.NET che mantiene vicino a 500 file di codice nella directory App_Code, così come centinaia di moduli Web con code-behind in varie cartelle del sito. È un progetto di sito Web (non un progetto di applicazione Web) e sono riluttante a cambiarlo poiché si tratta di un progetto con più sviluppatori coinvolti, oltre al modo in cui viene spedito il CMS.Ottimizzazione delle prestazioni di creazione di un progetto di sito Web ASP.NET?

Sto cercando suggerimenti e suggerimenti per ottimizzare il processo di costruzione di questo progetto di sito Web, poiché Visual Studio spesso desidera ricostruire tutti i file di origine e i file code-behind, che possono richiedere diversi minuti.

Esistono modi per evitare di ricostruire tutti i file? Dovrei sollevare il punto di separare il nostro codice e il codice CMS in progetti di applicazioni web separati (invece di un progetto di un sito web)? Ci sono altri modi per migliorare le prestazioni della build?

+1

Per caso, questo è CMS Sitefinity? –

+0

Haha no, è un CMS poco conosciuto chiamato Litium. Ma ora conosco un altro CMS per evitare ... =) – Blixt

+1

Oh no, Sitefinity va bene, ma sicuramente soffre degli stessi sintomi. E mi dà fastidio che sia anche un sito web, piuttosto che un progetto di applicazione web. –

risposta

13

Se la soluzione più semplice a livello di patch è quella di mantenere la struttura .cs il più simile possibile, andrei con la raccomandazione di Andreas di spostare App_Code in almeno un altro progetto.

Scott Guthrie posted a few tips su spey compila in VS 2005, non hai specificato la versione in cui ti trovavi, ma si applicano gli stessi suggerimenti sulla velocità. La seconda sezione del suo post è specifica per i progetti di siti Web.

Un altro suggerimento sarebbe se si sta lavorando su pagine e non il codice effettivamente nella directory App_Code, there is a build option that may be useful. Vai a Proprietà progetto>Costruire> Cambia Prima di eseguire l'avvio pagina dal sito Web Crea per Corporatura Pagina, questo sarà solo costruire la pagina di avvio quando si accende il debugger. Non sono sicuro se questo scenario si verifica spesso, ma se la maggior parte del tuo lavoro avviene nelle pagine e non in App_Code, questo ti farà risparmiare molto tempo di compilazione.

App_Code deve essere costruito insieme, è necessario evitare di avere codebehinds, ecc. Tutto ciò che può essere altrove dovrebbe essere. Solo una nota: il tempo di compilazione, almeno nel debug, è solitamente circa 30-50 volte più veloce in un'applicazione Web. Detto questo, devi ricompilare l'intera applicazione ogni cambio di codice in modo che ci siano degli svantaggi ... ma con cambiamenti nello spazio dei nomi e così via, capisco che le patch di deformazione ti verrebbero applicate.

Inoltre, tenere presente che quando si divide il codice in altri progetti, oltre ad essere più semplici in termini di compilazione, Visual Studio non dovrà compilare gli altri progetti di dipendenza a meno che non siano stati modificati. Allo stato attuale, tutto è equo perché qualsiasi cosa nel tuo progetto che può cambiare può influenzare qualsiasi altra cosa lì dentro ... tuttavia se lo dividi, Visual Studio compilerà solo gli altri tuoi progetti quando cambieranno o un progetto loro riferimento viene ricostruito.

3

Si dovrebbe almeno provare a convertirlo in un'applicazione Web, a meno che non vi siano alcune ragioni politiche per non farlo. Non è così difficile come sembra, il problema più grande è che tutti i tuoi sviluppatori potrebbero dover riconfigurare le loro soluzioni.

Provare a spostare tanto quanto il codice in App_Code in diversi progetti, in quanto non devono necessariamente essere nel sito Web. Questo dovrebbe aiutare almeno un po '.

+1

Quello che mi preoccupa è che cambiare la struttura del progetto rende più difficile applicare le patch dagli sviluppatori del CMS, e renderebbe anche il supporto più difficile (poiché non stiamo utilizzando la configurazione "ufficiale"). – Blixt

+1

Accetto @Blixt. Anche se non è davvero così difficile convertire un sito Web in un'applicazione web, ti tratterrai da aggiornamenti e patch relativamente semplici del fornitore CMS. –

0

Penso che il tuo problema più grande sarebbe l'enorme quantità di file. Vorrei separare l'app Web in più (almeno 2) progetti: il tuo progetto web e un livello aziendale (o qualcosa del genere).

È meglio che la maggior parte di quei file nel codice app siano entità o file che molto raramente cambiano e quindi nella tua situazione non ha molto senso tenerli nella tua app web.

Se si decide di seguire questa rotta quando si apporta una modifica a uno dei file nell'altro progetto, è necessario prestare molta attenzione quando si distribuiscono le modifiche poiché sarà necessario distribuire l'intera DLL.

4

Dovresti provare a utilizzare il nuovo flag OptimizeCompilation che abbiamo aggiunto di recente.

<compilation optimizeCompilations="true"> 

, vedere il mio blog post per imparare che cosa si tratta, e dove trovarlo. A meno che tu non sia su Win7 o stia usando VS2010, dovrai farlo tramite una hot fix.

+0

Dovresti sicuramente vedere i miglioramenti quando cambi un file in App_Code e poi richiedi una pagina, perché App_Code verrà ricompilato, mentre le pagine no. Si noti che questo si applica al comportamento di runtime, che è diverso dal comportamento di compilazione che si verifica all'interno di VS. –

+0

Cosa c'è su _compilation debug = "false" targetFramework = "4.5.1" defaultLanguage = "C#" optimizeCompilations = "true" lotto = "true" maxBatchGeneratedFileSize = "2147483647" maxBatchSize = "2147483647" numRecompilesBeforeAppRestart = "2147483647_? – Kiquenet

0

Abbiamo riscontrato un problema simile con il nostro progetto, che è stato sviluppato in questo modo per consentire l'aggiunta di nuovi siti partner whitelabel.

Il modo più semplice che abbiamo trovato per accelerare i tempi di compilazione era ridurre il collo di bottiglia di IO con cui si blocca Visual Studio. Ottieni un SSD decente (utilizziamo le unità OCZ da 60 gb Summit) dovresti trovare i tempi di costruzione migliorati in modo sostanziale.

L'altro risparmio di tempo è ridurre il numero totale di directory del progetto. Per ogni nuova directory rilevata da Visual Studio, viene avviata una nuova istanza del compilatore. Avere più file possibile nella stessa directory riduce questo costo. (Per ottenere la struttura delle cartelle che rende il progetto gestibile, utilizzare le cartelle virtuali)

Problemi correlati