2011-03-02 43 views
12

我试图提高MVC2应用启动的速度。提高ASP.NET MVC启动性能

我做了第一轮的表现采样,并出现了

MvcAreaRegistration.RegisterAllAreas 

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

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

所以我的第一个问题是:我怎样才能手动注册我的区域?

回答

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); 

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

0

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

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

总之 - 你需要 “区域” 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"); 
}