Pregunta

Durante nuestro proceso de compilación, ejecutamos aspnet_compiler.exe en nuestros sitios web para asegurarnos de que todo el contenido de ASP.NET/MVC se compila realmente (no sé nada de ASP.NET, pero estoy aseguró que esto es necesario para evitar encontrar las fallas en tiempo de ejecución).

Nuestros sitios son bastante grandes, con unos cientos de páginas / vistas / controles / etc. sin embargo, el tiempo necesario parece excesivo en el rango de 10-15 minutos (para referencia, esto es más largo de lo que toma la solución completa con aproximadamente 40 proyectos para compilar, y solo estamos precompilando dos proyectos de sitio web).

Dudo que el problema sea el hardware, ya que estoy ejecutando el último chip Intel de cuatro núcleos, con 4 GB de RAM y un disco duro WD Velociraptor de 10,000 rpm. Y parte de lo extraño es que el EXE no parece estar usando mucha CPU (1-5%) y tampoco parece estar haciendo una gran cantidad de E / S.

Entonces ... ¿es un problema conocido? ¿Por qué es tan lento? ¿Y hay alguna forma de acelerarlo?

Nota: para aclarar un par de cosas sobre las que la gente ha respondido, no estoy hablando de la compilación de código dentro de Visual Studio. Ya estamos utilizando proyectos de aplicaciones web, y la velocidad de compilación de esos no es el problema. El problema es la compilación previa del sitio después de que estos proyectos ya se han compilado ( vea esta página de MSDN para obtener más detalles ) como parte del script de compilación de desarrollo. Estamos realizando una compilación previa, no copiando los archivos en un directorio de destino.

¿Fue útil?

Solución

  1. El compilador debe generar un segundo archivo de código subyacente para cada página .aspx, comprobar
  2. Durante la compilación, aspnet_compiler.exe copiará TODOS los archivos del sitio web al directorio de salida, incluidos css, js e imágenes.

Obtendrá mejores tiempos de compilación utilizando Proyecto de aplicación web en lugar de Modelo de sitio web.

Otros consejos

Cambiar al compilador Roslyn probablemente mejorará significativamente el tiempo de precompilación. Aquí hay un buen artículo al respecto: http://blogs.msdn.com/b/webdev/archive/2014/05/12/enabling-the-net-compiler-platform-roslyn-in-asp -net-aplicaciones.aspx .

Además de esto, asegúrese de que la compilación por lotes esté habilitada estableciendo el atributo de lote en verdadero en el elemento de compilación.

Simplemente, el aspnet_compiler usa lo que es efectivamente un "compilador global de bloqueo". cada vez que comienza a precompilar cualquier página aspx individual; básicamente solo se permite compilar cada página secuencialmente.

Hay razones para esto (aunque personalmente no estoy de acuerdo con ellas), principalmente, para detectar y evitar referencias circulares que causen una especie de bucle infinito, así como para garantizar que todas las dependencias se construyan correctamente antes de que se compile la página requerida , evitan muchos "problemas desagradables de CS".

Una vez comencé a escribir una versión bifurcada de aspnet_compiler.exe la última vez que trabajé en una empresa web, pero me atasqué con "trabajo real". y nunca lo terminé El mayor problema son las páginas ASPX: las cosas MVC / Razor de las que puedes paralelizar el INFIERNO, pero el motor de análisis / compilación ASPX tiene aproximadamente 20 niveles de clases / métodos internos y privados.

No tengo ningún consejo específico para este compilador, pero cuando tengo este tipo de problema, ejecuto ProcMon para ver qué está haciendo el proceso en la máquina, y ejecuto Wireshark para verificar que no pasar años agotando el tiempo de acceso de red a una máquina olvidada hace mucho tiempo a la que se hace referencia en alguna clave de registro o variable de entorno.

Solo mis 2 centavos.

Una de las cosas que ralentiza la precompilación de las vistas ASP.NET es significativamente la opción de línea de comando -fixednames para aspnet_compiler.exe . No lo use especialmente si está en Razor / MVC.

Al publicar la aplicación wep desde Visual Studio, asegúrese de seleccionar " No fusionar " ;, y no seleccione " crear ensamblaje separado " porque esto es lo que causa el bloqueo global y ralentiza las cosas.

 ingrese la descripción de la imagen aquí

Más información aquí https: // msdn .microsoft.com / es-es / biblioteca / hh475319 (v = vs.110) .aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top