簡體   English   中英

ASP.NET MVC如何花費10秒鍾以上的時間(第一次)加載空白Controller?

[英]How can ASP.NET MVC takes more than 10 Seconds to load (for the first time) a blank Controller?

我正在管理一個(基本上)使用.NET MVCEntity FrameworkASP.NET MVC應用程序。 我注意到,每次發布網站時,每次(首次)加載每個Controller/Action都花費很長時間(大約10-15秒)。

我以為是Entity問題,所以我創建了一個空白的TestController/Index並放置了一個簡單的View代碼:

// Controller
public class TestController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

// View Index.cshtml
test page controller Page generated in @((DateTime.UtcNow - HttpContext.Current.Timestamp.ToUniversalTime()).TotalSeconds.ToString("F4")) seconds   

比我使用Visual Studio發布網站( FTP模式)。

發布后,我從瀏覽器中調用一個單獨的/通用/公共頁面(例如, Home/Index ),嘗試首次“加載/構建”該應用; 由於構建等原因,確實需要一些時間,但這很好)。

現在:當我嘗試加載空的TestController ,它仍然需要很多時間:

在此處輸入圖片說明

這怎么可能? 它是否分別編譯每個控制器? 因此,每次我加載新的控制器(在發布網站或重新分配池之后),都​​會花費那么多時間嗎? 我想我錯了...

我第二次加載它(及以下)的速度更快:

在此處輸入圖片說明

我怎樣才能解決這個問題? 問題可能出在哪里?

請注意-這是我的Global.asax ,不應刻上:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

    protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
    {
        HttpCookie authCookie = Request.Cookies["CookieFA"];
        if (authCookie != null)
        {
            FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

            CustomPrincipal principal = new CustomPrincipal(authTicket.Name);
            CustomPrincipalSerializeModel userSerializeModel = JsonConvert.DeserializeObject<CustomPrincipalSerializeModel>(authTicket.UserData);
            principal.UserID = userSerializeModel.ID;
            principal.FirstName = userSerializeModel.FirstName;
            principal.LastName = userSerializeModel.LastName;
            principal.Roles = userSerializeModel.RoleName.ToArray<string>();

            HttpContext.Current.User = principal;
        }
    }
}

發生這種情況是因為.NET在第一個請求中構建了與您的操作相關的視圖,這是第一個請求緩慢的原因,而下一個請求的速度更快。 為了改進它,您可以將視圖與應用程序一起構建,存在一些擴展可以為您完成這些操作,例如:

https://www.nuget.org/packages/RazorGenerator.Mvc/ https://www.nuget.org/packages/RazorGenerator.MsBuild/

您可以在RazorGenerator GitHub頁面上閱讀更多有關如何使用這些擴展的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM