When to use Application_Start vs Init in Global.asax


I am wondering under what circumstances I should be putting application initialisation code in Application_Start() vs Init() in my Global.asax file?

The distinction between the two doesn't seem very obvious to me, other than Application_start gets called first, then Init().

  • Why would I use one over the other?
  • Does it really make a difference?
  • What changes in the application state
    between the two events?

So far the only real pointer I can find is that IHttpModule only has an Init() method, so if what I'm doing may at some point be better suited to implement IHttpModule I should use the Init() method of Global.asax, if nothing else for consistency.

Best Solution

From the MSDN docs:

The Application_Start and Application_End methods are special methods that do not represent HttpApplication events. ASP.NET calls them once for the lifetime of the application domain, not for each HttpApplication instance.


Called once for every instance of the HttpApplication class after all modules have been created.

UPDATE: if you need to make sure a certain code is called only once in the app. lifecycle, Application_Start is a better solution. Examples: configuring log4net?