2009-04-06 14 views
71

Me pregunto bajo qué circunstancias debo poner el código de inicialización de la aplicación en Application_Start() frente a Init() en mi archivo Global.asax?Cuándo utilizar Application_Start vs Init en Global.asax?

La distinción entre los dos no me parece muy obvia, aparte de Application_start se llama primero, luego Init().

  • ¿Por qué debería usar una sobre la otra?
  • ¿Realmente hace la diferencia?
  • ¿Qué cambios en el estado de la aplicación entre los dos eventos?

Hasta ahora el único puntero reales que puedo encontrar es que IHttpModule Sólo hay un método Init(), así que si lo que hago puede en algún momento ser más adecuados para implementar IHttpModule que debe utilizar el método de Init()Global.asax, si nada más por consistencia.

Respuesta

79

Desde el MSDN docs:

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 vigencia del dominio de la aplicación, no para cada instancia de HttpApplication.

Init:

Llamado una vez para cada instancia de la clase HttpApplication después se han creado todas las módulos.

ACTUALIZACIÓN: 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: configurando log4net?

+3

Bit de una pregunta de seguimiento: ¿cuándo se crea una instancia de HttpApplication? Estoy asumiendo cada vez que se reinicie el proceso de trabajo y contendrá una instancia para cada hilo de trabajo. – roryf

+1

@roryf - asp.net mantiene un conjunto de instancias de aplicación que pueden ser reutilizadas. Debajo de las portadas, 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 un pequeño número de instancias y luego aumentan el tamaño del grupo a medida que aumenta la demanda. –

10

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

Cuestiones relacionadas