¿Cuándo usar Application_Start vs Init en Global.asax?

79

Me pregunto bajo qué circunstancias debería poner el código de inicialización de la aplicación en Application_Start()vs Init()en mi Global.asaxarchivo.

La distinción entre los dos no me parece muy obvia, aparte de que me Application_startllamen primero y luego Init().

  • ¿Por qué usaría uno sobre el otro?
  • ¿Realmente marca la diferencia?
  • ¿Qué cambia en el estado de la aplicación entre los dos eventos?

Hasta ahora, el único puntero real que puedo encontrar es que IHttpModulesolo tiene un Init()método, por lo que si lo que estoy haciendo puede ser más adecuado para implementar en algún momento IHttpModule, debería usar el Init()método de Global.asax, al menos por coherencia.

roryf
fuente

Respuestas:

89

De los documentos de MSDN :

Los métodos Application_Start y Application_End son métodos especiales que no representan eventos HttpApplication. ASP.NET los llama una vez durante la vida útil del dominio de la aplicación, no para cada instancia de HttpApplication .

En eso:

Se llama una vez para cada instancia de la clase HttpApplication después de que se hayan creado todos los módulos.

ACTUALIZAR: si necesita asegurarse de que un determinado código se llame solo una vez en la aplicación. ciclo de vida, Application_Start es una mejor solución. Ejemplos: ¿configurar log4net?

Igor Brejc
fuente
4
Una pequeña pregunta de seguimiento: ¿cuándo se crea una instancia de HttpApplication? ¿Supongo que cada vez que se reinicia el proceso de trabajo y contendrá una instancia para cada hilo de trabajo?
roryf
2
@roryf - asp.net mantiene un grupo de instancias de aplicaciones que se pueden reutilizar. Bajo las sábanas, las solicitudes se atienden utilizando el grupo de subprocesos CLR y las solicitudes entrantes se pondrán en cola más allá de un cierto umbral. Dudo que inicialicen el grupo de instancias de la aplicación a ese nivel de umbral, ya que la mayoría de los sitios no verán ese tipo de tráfico. Sospecho que crean el grupo con una pequeña cantidad de instancias y luego aumentan el tamaño del grupo a medida que aumenta la demanda.
Joel Fillmore
12

si

Hay diferencias entre ellos. El evento Application_Start () se llama solo una vez, mientras que el método Init () se llama cada vez que se crea una instancia de la aplicación.

David Gardiner
fuente