我有一个相当简单的ASP.MVC视图的性能问题。在网页上首次调用Url.Action
这是一个应该几乎是即时的登录页面,但需要大约半秒。
经过大量的挖掘,它看起来像问题是第一个电话Url.Action
- 它需要大约450毫秒(根据MiniProfiler),但似乎非常缓慢。
随后拨打Url.Action
的时间为< 1ms,这更符合我的预期。
无论我使用Url.Action("action", "controller")
还是Url.Action("action")
,这都是一致的,但如果使用Url.Content("~/controller/action")
似乎不会发生。这也发生在我拨打Html.BeginForm("action")
时。
有没有人有任何想法是什么造成这个?
调侃到source表明RouteCollection.GetVirtualPath
可能是罪魁祸首,因为这是常见的两种Url.Action
和Html.BeginForm
。但是,这肯定会在各地使用?我的意思是,半秒钟太慢了。
我有20个左右的自定义路由(这是一个相当大的应用程序与一些遗留的WebForms页面),但即使如此,时间似乎太慢了。
任何想法如何解决它?
这不会预编译视图,只是编译后编译它们,所以你得到构建错误,而不是运行时错误。它也没有什么区别 - 我在第一个Url.Action调用中仍然看到450ms左右。 – Keith 2012-08-10 13:03:22
使用ASPNet_Compiler.exe可以进行适当的预编译(请参阅http://msdn.microsoft.com/zh-cn/library/ms229863(v=vs.80).aspx),但即使没有那个时间我就会看到'网址。Action'非常疯狂 - 它几乎就像是在每次页面运行时发现控制器动作的完整反射。 – Keith 2012-08-10 13:36:49
你能显示你的RegisterRoutes(来自global.asax)吗?它可以利用你的时间。 – 2012-08-10 14:19:31