2011-03-02 22 views
12

MVC2 uygulamasının başladığı hızı artırmaya çalışıyorum. ASP.NET MVC başlangıç ​​performansının iyileştirilmesi

Ben performans örnekleme bir ilk turunu yaptım ve

MvcAreaRegistration.RegisterAllAreas 

başlangıç ​​zamanının çoğunu kapladığını görünür.

here numarasını okudum ve alanın kaydını da el ile yapabilirsin ve bunu denemek isterim ama sözdiziminin bu sayfada nasıl çalıştığından emin değilim.

Bu yüzden (ilk) soruyu yüksek sesle: Alanımı el ile nasıl kaydedebilirim?

cevap

5

İlk böyle Global.asax kendine bir yardımcı yöntemini hazırlamak:

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

Şimdi böyle Application_Start manuel kayıt için bu yardımcı yöntemini kullanabilirsiniz:

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

AreaRegistration sınıfları vardır Yeni Alan eklediğinizde Visual Studio tarafından oluşturulan, bunları Fields/AreaName dizinlerinde bulabilirsiniz.

0

Bunu tamamen el ile yapabilir ve RegisterArea uygulamalarını kullanmaktan kaçabilirsiniz.

Kontrol Bu madde: Kısacası http://www.philliphaydon.com/2011/07/mvc-areas-routes-order-of-routes-matter/

- güzergaha "alan" DataToken eklemem gerekiyor:

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