ASP.NET MVC如何花费10秒钟以上的时间(第一次)加载空白Controller?

时间:2018-08-24 12:17:33

标签: .net asp.net-mvc performance iis publish

我正在管理一个.NET MVC应用程序,该应用程序(基本上)使用Entity FrameworkController/Action。我注意到,每次发布网站时,每次(首次)加载每个Entity时,都要花费很长时间(大约10-15秒)。

我认为这是一个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

比起我使用FTPHome/Index模式)发布网站。

发布后,我从浏览器中调用一个单独的/通用/公共页面(例如TestController),尝试首次“加载/构建”该应用;由于构建等原因,确实需要一些时间,但这很好。)

现在:当我尝试加载空的Global.asax时,仍然需要很多时间:

enter image description here

这怎么可能?它是否分别编译每个控制器?因此,每次我加载新的控制器(在发布网站或重新分配池之后),都​​会花费那么多时间吗?我想我错了...

第二次加载(和以下)它的速度非常快:

enter image description here

我该如何解决?哪里可能出问题了?

请注意-这是我的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; } } } ,不应刻上:

{{1}}

1 个答案:

答案 0 :(得分:1)

发生这种情况是因为.NET在第一个请求中构建了与您的操作相关的视图,这是第一个请求缓慢的原因,而下一个请求的速度更快。为了改进它,您可以与应用程序一起构建视图,并存在一些扩展可以为您完成这些操作,例如:

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

您可以在RazorGenerator GitHub页面上了解有关如何使用这些扩展的更多信息。