Улучшение производительности при запуске ASP.NET MVC - PullRequest
13 голосов
/ 02 марта 2011

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

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

MvcAreaRegistration.RegisterAllAreas

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

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

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

Ответы [ 3 ]

5 голосов
/ 03 марта 2011

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

4 голосов
/ 03 марта 2011

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

0 голосов
/ 17 июля 2014

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

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

Вкратце - вам необходимо добавить DataToken "area" к вашему маршруту:

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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...