[英]How can ASP.NET MVC takes more than 10 Seconds to load (for the first time) a blank Controller?
我正在管理一個(基本上)使用.NET MVC
和Entity Framework
的ASP.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.