Ho un problema di prestazioni con una visualizzazione ASP.MVC piuttosto semplice.Prima chiamata a Url.Azione su una pagina è lenta
È una pagina di accesso che dovrebbe essere quasi istantanea, ma richiede circa mezzo secondo.
Dopo un sacco di scavo sembra che il problema è la prima chiamata il Url.Action
- sta prendendo circa 450 ms (secondo MiniProfiler), ma che sembra follemente lento.
Le chiamate successive a Url.Action
stanno prendendo < 1 ms, che è più in linea con quello che mi aspetterei.
È coerente se utilizzo Url.Action("action", "controller")
o Url.Action("action")
, ma non sembra che accada se utilizzo Url.Content("~/controller/action")
. Questo succede anche quando chiamo Html.BeginForm("action")
.
Qualcuno ha idea di cosa sta causando questo?
A scavare nel source suggerisce che RouteCollection.GetVirtualPath
potrebbe essere il colpevole, in quanto questo è comune ad entrambi Url.Action
e Html.BeginForm
. Tuttavia, sicuramente è usato dappertutto? Voglio dire, ½ secondo è troppo lento.
Ho circa 20 percorsi personalizzati (è un'app abbastanza grande con alcune pagine WebForms legacy) ma anche allora i tempi sembrano troppo lenti.
Qualche idea su come risolverlo?
Ciò non precompilare vista, che appena li compila dopo una compilazione in modo da ottenere errori di generazione, piuttosto che errori runtime. Inoltre non ha fatto alcuna differenza - sto ancora vedendo 450ms circa alla prima chiamata "Url.Action". – Keith
La corretta pre-compilazione è possibile con ASPNet_Compiler.exe (vedere http://msdn.microsoft.com/en-us/library/ms229863(v=vs.80).aspx) ma anche senza che il tempo che sto vedendo è ' url.Le azioni sono pazzesche: è quasi come se stesse riflettendo a fondo per trovare le azioni del controller ogni volta che la pagina scorre. – Keith
Puoi mostrare i tuoi RecordRoute (da global.asax)? Può sfruttare il tuo tempo. –