我有一個相當簡單的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