提高ASP.NET MVC启动性能

时间:2011-03-02 14:48:23

标签: asp.net-mvc performance asp.net-mvc-2

我正在努力提高我的MVC2应用启动的速度。

我做了第一轮性能抽样,看来

MvcAreaRegistration.RegisterAllAreas

占据了大部分的启动时间。

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

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

3 个答案:

答案 0 :(得分: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 :(得分:4)

试试this super handy area registration utility。它不仅使注册更容易,而且速度更快,因为它不扫描区域的每个加载组件。

答案 2 :(得分:0)

您可以手动完成此操作,避免使用RegisterArea实现。

查看这篇文章: http://www.philliphaydon.com/2011/07/mvc-areas-routes-order-of-routes-matter/

简而言之 - 你需要添加&#34; area&#34; 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");
}