Подтвердить что ты не робот

Улучшение производительности ASP.NET MVC

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

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

MvcAreaRegistration.RegisterAllAreas

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

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

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

4b9b3361

Ответ 2

Сначала подготовьте себе вспомогательный метод в 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.

Ответ 3

Вы можете сделать это полностью вручную и не использовать реализации RegisterArea.

Проверьте эту статью: http://www.philliphaydon.com/2011/07/mvc-areas-routes-order-of-routes-matter/

Короче - вам нужно добавить "area" 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");
}