我试图提高MVC2应用启动的速度。提高ASP.NET MVC启动性能
我做了第一轮的表现采样,并出现了
MvcAreaRegistration.RegisterAllAreas
占用了大部分的启动时间。
我读here,你也可以手动注册该区域,我想尝试一下,但我不确定该页面的语法是如何工作的。
所以我的第一个问题是:我怎样才能手动注册我的区域?
我试图提高MVC2应用启动的速度。提高ASP.NET MVC启动性能
我做了第一轮的表现采样,并出现了
MvcAreaRegistration.RegisterAllAreas
占用了大部分的启动时间。
我读here,你也可以手动注册该区域,我想尝试一下,但我不确定该页面的语法是如何工作的。
所以我的第一个问题是:我怎样才能手动注册我的区域?
尝试this super handy area registration utility。它不仅使注册更容易,而且更快,因为它不扫描区域的每个装载组件。
首先准备自己一个辅助方法在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目录中找到它们。
您可以完全手动完成此操作,并避免使用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");
}