提高ASP.NET MVC启动性能

15

我试图提高我的MVC2应用程序启动速度。

我进行了第一轮性能采样,发现

MvcAreaRegistration.RegisterAllAreas

启动时间的大部分被占用了。

我在这里读到,您也可以手动注册区域,我想尝试一下,但是我不确定该页面上的语法是如何工作的。

所以我的(第一个)问题是:如何手动注册我的区域?

3个回答

6

5

首先在Global.asax中准备一个辅助方法,代码如下:

private static void RegisterArea<T>(RouteCollection routes, object state) where T : AreaRegistration 
{ 
  AreaRegistration registration = (AreaRegistration)Activator.CreateInstance(typeof(T)); 
  AreaRegistrationContext registrationContext = new AreaRegistrationContext(registration.AreaName, routes, state); 
  string areaNamespace = registration.GetType().Namespace; 
  if (!String.IsNullOrEmpty(areaNamespace)) 
    registrationContext.Namespaces.Add(areaNamespace + ".*"); 
  registration.RegisterArea(registrationContext); 
}

现在,您可以像这样在Application_Start中使用此辅助方法进行手动注册:
//Replace AreaRegistration.RegisterAllAreas(); with lines like those
RegisterArea<FirstAreaRegistration>(RouteTable.Routes, null); 
RegisterArea<SecondAreaRegistration>(RouteTable.Routes, null);

当您添加新的区域时,Visual Studio 会创建 AreaRegistration 类,您可以在 Areas/AreaName 目录中找到它们。


1
您可以完全手动操作,避免使用RegisterArea实现。
请查看这篇文章: http://www.philliphaydon.com/2011/07/mvc-areas-routes-order-of-routes-matter/ 简而言之 - 您需要向路由添加“area”DataToken:
private void RegisterAreas(RouteCollection routes)
{
    // AreaRegistration.RegisterAllAreas();
    var route = routes.MapRoute(
        "MyArea_Default",
        "MyArea/{controller}/{action}/{id}",
        new { controller = "App", action = "Index", id = UrlParameter.Optional },
        new string[] { "MyProject.Areas.*" }
    ).DataTokens.Add("Area", "CDR");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接