何时在Global.asax中使用Application_Start vs Init?

ror*_*ryf 76 asp.net global-asax

我想知道在什么情况下我应该在我的文件中将应用程序初始化代码放入Application_Start()vs ?Init()Global.asax

两者之间的区别对我来说似乎并不是很明显,除了Application_start首先被调用之外Init().

  • 为什么我会使用一个而不是另一个?
  • 它真的有所作为吗?
  • 两个事件之间的应用程序状态有何变化?

到目前为止,我能找到的唯一真正的指针是IHttpModule只有一个Init()方法,所以如果我正在做的事情在某些时候可能更适合实现IHttpModule我应该使用Init()方法Global.asax,如果没有别的一致性.

Igo*_*ejc 86

来自MSDN文档:

Application_Start和Application_End方法是不代表HttpApplication事件的特殊方法.ASP.NET 在应用程序域的生命周期内调用它们一次,而不是为每个HttpApplication实例调用它们.

在里面:

在创建所有模块后,为HttpApplication类的每个实例调用一次.

更新:如果您需要确保在应用程序中只调用一次特定代码.生命周期,Application_Start是一个更好的解决方案.示例:配置log4net?

  • 后续问题的一点:什么时候创建了HttpApplication的实例?我假设每次重新启动worker-process并且每个worker-thread包含一个实例? (4认同)
  • @roryf - asp.net 维护一个可以重用的应用程序实例池。在幕后,请求使用 CLR 线程池提供服务,传入的请求将排队超过某个阈值。我怀疑他们将应用程序实例池初始化为该阈值级别,因为大多数站点不会看到这种流量。我怀疑他们创建了具有少量实例的池,然后随着需求的增加而增加池的大小。 (3认同)

小智 11

它们之间存在差异.只有一次调用Application_Start()事件,而每次创建应用程序实例时都会调用Init()方法.