Domanda

Durante il nostro processo di compilazione eseguiamo aspnet_compiler.exe contro i nostri siti Web per assicurarci che tutte le cose in ritardo in ASP.NET/MVC vengano effettivamente compilate (non so nulla di ASP.NET ma sono ha assicurato che ciò è necessario per evitare di trovare gli errori in fase di esecuzione).

I nostri siti sono di dimensioni abbastanza grandi, con poche centinaia di pagine / visualizzazioni / controlli / ecc. tuttavia il tempo impiegato sembra eccessivo nell'intervallo di 10-15 minuti (per riferimento, questo è più lungo di quanto ci vuole l'intera soluzione con circa 40 progetti da compilare e stiamo solo pre-compilando due progetti di siti Web).

Dubito che l'hardware sia il problema in quanto sto utilizzando l'ultimo chip Intel quad-core, con 4 GB di RAM e un disco rigido WD Velociraptor da 10.000 giri / min. E una parte di ciò che è strano è che il file EXE non sembra utilizzare molta CPU (1-5%) e non sembra nemmeno fare un sacco di I / O.

Quindi ... è un problema noto? Perché è così lento? E c'è un modo per accelerarlo?

Nota: per chiarire un paio di cose a cui le persone hanno risposto, non sto parlando della compilazione del codice in Visual Studio. Stiamo già utilizzando progetti di applicazioni Web e la velocità di compilazione di questi non è il problema. Il problema è la pre-compilazione del sito dopo che questi progetti sono già stati compilati ( vedi questa pagina MSDN per maggiori dettagli ) come parte dello script di sviluppo dev. Stiamo eseguendo una pre-compilazione sul posto, non copiando i file in una directory di destinazione.

È stato utile?

Soluzione

  1. Il compilatore dovrebbe generare il secondo file code-behind per ogni pagina aspx, controllare
  2. Durante la compilazione, aspnet_compiler.exe copierà TUTTI i file del sito Web nella directory di output, inclusi css, js e images.

Otterrai tempi di compilazione migliori utilizzando Project application Web invece di Modello di sito Web.

Altri suggerimenti

Il passaggio al compilatore Roslyn molto probabilmente migliorerà significativamente il tempo di precompilazione. Ecco un buon articolo a riguardo: http://blogs.msdn.com/b/webdev/archive/2014/05/12/enabling-the-net-compiler-platform-roslyn-in-asp -net-applications.aspx.

Inoltre, assicurarsi che la compilazione batch sia abilitata impostando l'attributo batch su true sull'elemento compilation.

Semplicemente, il aspnet_compiler utilizza quello che è effettivamente un "blocco globale del compilatore" ogni volta che inizia la pre-compilazione di ogni singola pagina aspx; in pratica è consentito solo compilare ogni pagina in sequenza.

Ci sono ragioni per questo (anche se personalmente non sono d'accordo con loro) - principalmente, al fine di rilevare e prevenire riferimenti circolari che causano un ciclo infinito di sorta, oltre a garantire che tutte le dipendenze siano costruite correttamente prima che la pagina richiesta sia compilata , evitano molti "cattivi problemi di CS".

Una volta ho iniziato a scrivere una versione biforcuta di aspnet_compiler.exe l'ultima volta che ho lavorato in una società web, ma sono stato legato a "lavoro reale"; e non l'ho mai finito. Il problema più grande sono le pagine ASPX: le cose MVC / Razor di cui puoi parallelizzare HELL, ma il motore di analisi / compilazione ASPX è profondo circa 20 livelli di classi / metodi interni e privati.

Non ho suggerimenti specifici per questo compilatore, ma quando ho questo tipo di problema, eseguo ProcMon per vedere cosa sta facendo il processo sulla macchina e eseguo Wireshark per verificare che non lo sia impiegando anni a ritardare l'accesso alla rete a una macchina dimenticata da tempo a cui fa riferimento una chiave di registro o una variabile di ambiente.

Solo i miei 2 centesimi.

Una delle cose che rallenta significativamente la precompilazione delle visualizzazioni ASP.NET è l'opzione della riga di comando -fixednames per aspnet_compiler.exe . Non usarlo specialmente se sei su Razor / MVC.

Quando pubblichi l'app wep da Visual Studio assicurati di selezionare " Non unire " ;, e non seleziona " crea un assieme separato " causa questo è ciò che provoca il blocco globale e rallenta le cose.

 inserisci qui la descrizione dell'immagine

Maggiori informazioni qui https: // msdn .microsoft.com / en-us / library / hh475319 (v = vs.110) aspx

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