学习于:http://msdn.microsoft.com/zh-cn/library/ms178473(v=vs.100).aspx
1. Asp.net应用程序生命周期事件和Global.asax文件
在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法。若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为 Global.asax 的文件。
如果创建了Global.asax文件,ASP.NET会将其编译为从HttpApplication类派生的类,然后使用该派生类表示应用程序。
public class Global : System.Web.HttpApplication
{
//...
}
通过使用命名约定Application_event(如 Application_BeginRequest),ASP.NET可在Global.asax文件中将应用程序事件自动绑定到处理程序。其实Global.asax类中的这些事件都是HttpModule事件。有时,可能Global.asax中的事件不是我们想要的,那么我们可以创建一个IHttpModule接口的实现类,并在该类中将自己的功能代码通过以HttpModule的方式注入到HttpApplication相应的事件上,最后在Web.config文件中作配置即可
HttpApplication进程的一个实例每次只处理一个请求,
Application_Start 和 Application_End 方法同 HttpApplication其他事件不同,在应用程序域的整个生命周期期间,ASP.NET仅调用这两个方法一次,而不是对每个HttpApplication实例都调用一次,也就是说在应用程序域的整个生命周期期间,会有多个HttpApplication实例,且HttpApplication实例是可以重用的,当HttpRuntime不能从HttpApplicationFactory获取空闲的实例时,才会去新建该实例
下表列出在应用程序生命周期期间使用的一些事件和方法。实际远不止列出的这些事件,但这些事件是最常用的。
2. 编译生命周期
在第一次对应用程序发出请求时,ASP.NET按特定顺序编译应用程序项。要编译的第一批项称为顶级项。在第一次请求之后,仅当依赖项更改时才会重新编译顶级项。下表描述编译 ASP.NET 顶级项的顺序。
在编译应用程序的顶级项之后,ASP.NET 将根据需要编译文件夹、页和其他项。下表描述编译 ASP.NET 文件夹和项的顺序。
编译后的程序集缓存在服务器上并在后续请求时被重用,并且只要源代码未更改,就会在应用程序重新启动之间得到保留。
由于应用程序在第一次请求时进行编译,所以对应用程序的初始请求所花的时间会明显长于后续请求。可以预编译应用程序以减少第一次请求所需的时间。