我正在管理一个.NET MVC
应用程序,该应用程序(基本上)使用Entity Framework
和Controller/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
比起我使用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;
}
}
}
,不应刻上:
{{1}}
答案 0 :(得分:1)
发生这种情况是因为.NET在第一个请求中构建了与您的操作相关的视图,这是第一个请求缓慢的原因,而下一个请求的速度更快。为了改进它,您可以与应用程序一起构建视图,并存在一些扩展可以为您完成这些操作,例如:
https://www.nuget.org/packages/RazorGenerator.Mvc/ https://www.nuget.org/packages/RazorGenerator.MsBuild/
您可以在RazorGenerator GitHub页面上了解有关如何使用这些扩展的更多信息。