Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.net MVC:为什么AreaRegistration.RegisteralAreas()这么慢?_C#_Asp.net Mvc_Performance - Fatal编程技术网

C# ASP.net MVC:为什么AreaRegistration.RegisteralAreas()这么慢?

C# ASP.net MVC:为什么AreaRegistration.RegisteralAreas()这么慢?,c#,asp.net-mvc,performance,C#,Asp.net Mvc,Performance,我有一个小的ASP.net MVC应用程序,大约有10个视图和2个控制器,加载一个站点需要很长时间(不是很长时间,而是30-50秒) 我做了一些分析,发现超过50%的时间花在Global.asax.cs文件中的以下行上: AreaRegistration.RegisterAllAreas(); 原因是什么?我如何提高性能?您是否使用MVC区域?如果没有,只需删除或注释该行即可。我以前注意到过这一点,但对此没有真正的解释。这很慢,因为它将反映所有正在查找区域注册的程序集并生成缓存文件。另见 如果

我有一个小的ASP.net MVC应用程序,大约有10个视图和2个控制器,加载一个站点需要很长时间(不是很长时间,而是30-50秒)

我做了一些分析,发现超过50%的时间花在Global.asax.cs文件中的以下行上:

AreaRegistration.RegisterAllAreas();

原因是什么?我如何提高性能?

您是否使用MVC区域?如果没有,只需删除或注释该行即可。我以前注意到过这一点,但对此没有真正的解释。

这很慢,因为它将反映所有正在查找区域注册的程序集并生成缓存文件。另见

如果您使用的是区域,我已经编写了一个小扩展来注册特定的区域,这样您就不需要扫描所有程序集:

公共静态类AreaRegistrationExtensions
{
/// 
///注册特定区域。
///
///这避免了将执行程序集扫描的慢速寄存器区域。
///实现基于MVC的源代码。
/// 
/// 
/// 
公共静态无效注册表区域(此HttpApplication应用程序),其中TArea:AreaRegistration
{
var registration=(AreaRegistration)Activator.CreateInstance(typeof(TArea));
var context=新的AreaRegistrationContext(registration.AreaName,RouteTable.Routes);
string str=typeof(TArea).Namespace;
如果(str!=null)
context.Namespaces.Add(str+“*”);
注册。注册区域(上下文);
}
}
应用程序启动中的用法

this.RegisterArea();

在创建MVC项目时,默认情况下会添加它。当我不使用区域时,我已经在应用程序中删除了它,没有任何问题。如果要使用区域,显然需要将其重新打开。我知道它是默认添加的,并且具有重要意义。让我们看看Preli在删除该行后看到了什么效果。它仍然有效。还是很慢!貌似探查器显示了错误的信息。这似乎并没有显示出什么是真正减缓一切的原因。此外,我现在的问题是,它在我的pc上运行得相当快,但在生产系统上运行得非常慢(尽管生产服务器的功率比我的笔记本电脑大得多)。它只是在网站初次上线时运行缓慢吗?这可能是由应用程序池预热引起的。一旦应用程序被命中一次,它是否仍然很快?一旦你投入生产,你可以为你的网站寻找一个保持活力的服务。不幸的是,对于.net应用程序来说,没有真正好的解决方法。Microsoft在.NET 4中添加了一项功能,允许您对应用程序池进行某些设置,以防止其关闭。我现在想不出他们称之为什么,我将四处搜索,看看是否能为您找到答案。感谢您的努力。它总是很慢,不仅仅是第一次击中。我很确定问题出在我的代码中的某个地方——也许我应该尝试不同的分析器。