我有global.asax,它是从我创建的自定义类扩展而来的,称为MvcApplication,它是从System.Web.HttpApplication扩展而来的。

在其构造函数中,它按如下记录应用程序启动:

protected MvcApplicationGeneral()
{
    _log.Info("logApplicationStartToTextFile");
}

当我去查看日志文件时,这似乎被称为很多次,而不仅仅是每个应用程序启动一次。我在Application_Start中放置了另一个日志条目,似乎只被调用了一次。 Global.asax类是按请求实例化的,还是比每个应用程序一次实例化的频繁得多?

最佳答案

在asp.net应用程序的生命周期中,将创建多个HttpAppliction对象实例并将其合并以处理请求。
是Application_Start将仅被调用一次。

引用http://www.codeproject.com/Articles/73728/ASP-NET-Application-and-Page-Life-Cycle

摘抄:
创建所有核心ASP.NET对象后,就会创建“HttpApplication”对象来处理请求。如果您的系统中有一个“global.asax”文件,则将创建“global.asax”文件的对象。请注意,global.asax文件继承自HttpApplication类。
注意:第一次将ASP.NET页面附加到应用程序时,将创建“HttpApplication”的新实例。说到做到最好,可以最大化性能,HttpApplication实例可以重用于多个请求。

10-04 20:48