2010-07-22 46 views

回答

6

我假設你指的是ASP.NET MVC應用程序中的Global.asax文件。請注意,您的global.asax擴展System.Web.HttpApplication如:

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     // (snip) 
    } 

    protected void Application_Init() 
    { 
     // Why is this running twice? 
    } 

    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     RegisterRoutes(RouteTable.Routes); 
    } 
} 

基本上multiple HttpApplication instances are being instantiated to serve multiple incoming HTTP requests。一旦請求完成,HttpApplication實例就會回到一個池中再次被重用,類似於數據庫連接池。

你無法預測有多少的HttpApplication實例將被創建,主要因爲它需要滿足從打你的web應用程序的HTTP請求需求ASP.NET工作進程將創造儘可能多的。你的Application_Init()會被調用兩次,因爲正在創建2個HttpApplication實例,儘管它只是運行你的網站。這可能是因爲您在HTML中引用了其他服務器端資源(JavaScript文件,CSS等)或者可能是Ajax請求。

如果你想保證代碼只運行一次,然後把它放在你的Global.asax中的Application_Start()方法。 Or use a Bootstrapper

+0

參見[這個答案](https://stackoverflow.com/a/13169688/23118)。 – hlovdal 2017-09-19 13:07:12

相關問題