我有一个小型ASP.net MVC应用程序,包含大约10个视图和2个控制器,这需要永远(不是永远但在30-50秒之间)加载站点。
我做了一些分析,发现超过50%的时间是花在我的Global.asax.cs文件中的以下行:
AreaRegistration.RegisterAllAreas();
可能是什么原因以及如何改善表现?
答案 0 :(得分:9)
您使用的是MVC区域吗?如果没有,只需删除或注释该行。我以前注意到了这一点,但没有真正的解释。
答案 1 :(得分:0)
这很慢,因为它将反映所有正在寻找区域注册的程序集并构建缓存文件。另请参见Inside Areas Registration。
如果您正在使用区域,我已经写了一个小的扩展名来注册特定区域,因此您不必担心需要扫描所有程序集:
public static class AreaRegistrationExtensions
{
/// <summary>
/// Register specific Area.
///
/// This circumvents the slow RegisterAllAreas that will perform assembly scanning.
/// Implementation based on MVC source code.
/// </summary>
/// <typeparam name="TArea"></typeparam>
/// <param name="application"></param>
public static void RegisterArea<TArea>(this HttpApplication application) where TArea : AreaRegistration
{
var registration = (AreaRegistration)Activator.CreateInstance(typeof(TArea));
var context = new AreaRegistrationContext(registration.AreaName, RouteTable.Routes);
string str = typeof(TArea).Namespace;
if (str != null)
context.Namespaces.Add(str + ".*");
registration.RegisterArea(context);
}
}
在Application_Start
中的用法:
this.RegisterArea<MyArea>();