2011-03-02 19 views
12

Estoy intentando mejorar la velocidad a la que se inicia mi aplicación MVC2.Mejorar el rendimiento de inicio de ASP.NET MVC

Hice una primera ronda de muestreo de rendimiento, y parece que la

MvcAreaRegistration.RegisterAllAreas 

está ocupando la mayor parte del tiempo de inicio.

Leí here que también puede registrar manualmente el área, y me gustaría probarlo, pero no estoy seguro de cómo funciona la sintaxis en esa página.

Así que mi (primera) pregunta será: ¿cómo puedo registrar mi Área de forma manual?

Respuesta

5

Primera prepararse un método de ayuda en Global.asax así:

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

Ahora usted puede utilizar este método de ayuda para el registro manual en Application_Start así:

//Replace AreaRegistration.RegisterAllAreas(); with lines like those 
RegisterArea<FirstAreaRegistration>(RouteTable.Routes, null); 
RegisterArea<SecondAreaRegistration>(RouteTable.Routes, null); 

Las clases son AreaRegistration creado por Visual Studio cuando agrega un Área nueva, puede encontrarlos en los directorios Areas/AreaName.

0

Puede hacerlo completamente a mano y evitar el uso de las implementaciones de RegisterArea.

Comprobar este artículo: http://www.philliphaydon.com/2011/07/mvc-areas-routes-order-of-routes-matter/

En pocas palabras - es necesario agregar "zona" DataToken a la ruta:

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"); 
} 
Cuestiones relacionadas