2011-03-02 4 views
12

Я пытаюсь улучшить скорость запуска моего приложения MVC2.Улучшение производительности ASP.NET MVC

Я сделал первый раунд отбора производительности, и, кажется, что

MvcAreaRegistration.RegisterAllAreas 

занимает большую часть времени запуска.

Я читал here, что вы можете также вручную зарегистрировать область, и я хотел бы попробовать это, но я не уверен, как синтаксис работает на этой странице.

Так что мой (первый) вопрос будет: как я могу зарегистрировать свой регион вручную?

ответ

3

Пробег: this super handy area registration utility. Он не только упрощает регистрацию, но и ускоряется, поскольку он не сканирует каждую загруженную сборку для областей.

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"); 
} 
Смежные вопросы