¿Cómo mantener mi aplicación ASP.NET siempre "viva", y si es una mala idea, por qué no debería hacerlo?

StackOverflow https://stackoverflow.com/questions/817655

  •  03-07-2019
  •  | 
  •  

Pregunta

Recientemente implementé una aplicación ASP.NET en mi nuevo y brillante VPS y, si bien estoy contento con el aumento general del rendimiento que un VPS puede brindar sobre una solución de alojamiento compartido, no estoy satisfecho con el tiempo de inicio de mi aplicación.

Mi aplicación web tarda bastante tiempo en iniciarse cuando mi cliente la golpea por primera vez. No lo estoy ejecutando en modo de depuración (deshabilitado en mi web.config), y no tiene ningún trabajo real para hacer en el inicio. No tengo ningún código en el controlador de eventos de inicio de mi aplicación, no comienzo ningún Hilos extra, nada. La primera vez que mi cliente llega a mi aplicación, tarda unos 15-20 segundos en responder. Las llamadas subsiguientes toman 1-2 segundos, a menos que espere unos minutos a que se cierre mi aplicación. Luego regresa a un tiempo de inicio de 15-20 segundos.

(Estoy consciente de que mi punto de referencia de tiempo es muy poco científico, esos números deberían dar una idea del rendimiento en el inicio de mi aplicación).

Mi comprensión de ASP.NET era que IIS (7.0, en este caso), compila una aplicación web la primera vez que se ejecuta, y luego almacena en caché esos binarios hasta el momento en que se cambia la aplicación web. ¿Mi entendimiento es incorrecto?

Entonces, después de ese prefacio del tamaño de un libro, aquí están mis preguntas:

  • ¿Mi comprensión de la compilación de ASP.NET es incorrecta? ¿Cómo funciona realmente?
  • ¿Hay alguna manera de forzar a IIS a que almacene en caché mis binarios o mantenga mi aplicación viva indefinidamente?
  • Si es una mala idea hacer una de las cosas en mi pregunta anterior, ¿por qué es una mala idea y qué puedo hacer para aumentar el rendimiento de inicio?

¡Gracias!

Editar: parece que mi pregunta es un ligero duplicado de esta pregunta (pensé que hice un mejor trabajo de búsqueda de una respuesta a esto aquí, jaja). Sin embargo, creo que mi pregunta es más completa y agradecería que no se cerrara como un duplicado a menos que haya preguntas mejores y ya hechas aquí que traten esto.

¿Fue útil?

Solución

IIS también apaga su aplicación web después de un período de tiempo determinado, dependiendo de su configuración. No estoy tan familiarizado con IIS7 y dónde configurar esto, por lo que es posible que desee hacer una pequeña investigación sobre cómo configurarlo ( ¿punto de partida? ).

¿Es malo? Depende de qué tan bueno sea tu código. Si no está perdiendo memoria o recursos, probablemente no.

La otra solución es precompila tu sitio web . Esta podría ser la mejor opción para ti. Tendrá que comprobarlo y verlo, sin embargo, ya que puede tener un inconveniente, dependiendo de cómo interactúe con su sitio web.

Otros consejos

  

Mi comprensión de ASP.NET fue que IIS (7.0, en este caso), compila una aplicación web la primera vez que se ejecuta, y luego almacena en caché esos binarios hasta el momento en que se cambia la aplicación web. ¿Es mi comprensión incorrecta?

Eso es correcto. Específicamente, los ensamblajes se crean como instantáneas (que no deben confundirse con el servicio de instantáneas de volumen / función de instantáneas). Esto le permite reemplazar el código en la carpeta sobre la marcha sin afectar las sesiones de ejecución existentes. ASP.NET detectará el cambio y compilará las nuevas versiones en el directorio de destino (generalmente Archivos temporales de ASP.NET ). Más sobre ese proceso: Descripción de la compilación dinámica de ASP.NET

Si es puramente el tiempo de compilación, a menudo, el enfoque más eficiente es golpear el sitio web usted mismo después del reciclaje. Realice una llamada a intervalos regulares para asegurarse de que es usted quien recibe la demora de 15 segundos, no su cliente.

Sin embargo, me sorprendería si eso es todo el tiempo de compilación (dependiendo del hardware): ¿tiene muchas instancias estáticas de clases? ¿Hacen mucho trabajo en la puesta en marcha?

Con el rastreo o la creación de perfiles, es probable que pueda calcular rápidamente dónde se gastó el tiempo de inicio.

En cuanto a por qué mantener un proceso alrededor es una mala idea, creo que se debe aclarar. No importa qué tan bien cuidemos nuestros datos o qué tan bien se comporte el GC, se realiza una buena limpieza al reiniciar el proceso. Las cosas como la fragmentación pueden desaparecer y cualquier otro problema de recursos que se acumule con el tiempo se soluciona. Por lo tanto, es una mala idea mantener un proceso del servidor ejecutándose indefinidamente.

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