Tengo un problema de rendimiento con una vista ASP.MVC bastante simple.Primera llamada a Url. La acción en una página es lenta
Es una página de inicio de sesión que debe ser casi instantánea, pero tarda aproximadamente medio segundo.
Después de una gran cantidad de excavaciones, parece que el problema es la primera llamada al Url.Action
- está tomando alrededor de 450ms (de acuerdo con MiniProfiler), pero eso parece increíblemente lento.
Las llamadas posteriores a Url.Action
están tomando < 1ms, lo cual está más en línea con lo que esperaría.
Esto es consistente ya sea que use Url.Action("action", "controller")
o Url.Action("action")
, pero no parece suceder si uso Url.Content("~/controller/action")
. Esto también ocurre cuando llamo al Html.BeginForm("action")
.
¿Alguien tiene alguna idea de lo que está causando esto?
una excavación en el source sugiere que RouteCollection.GetVirtualPath
podría ser el culpable, ya que es común a ambos Url.Action
y Html.BeginForm
. Sin embargo, seguramente eso se usa en todo el lugar? Quiero decir, ½ segundo es demasiado lento.
Tengo 20 o más rutas personalizadas (es una aplicación bastante grande con algunas páginas heredadas de WebForms) pero incluso entonces los tiempos parecen demasiado lentos.
¿Alguna idea de cómo solucionarlo?
Eso no precompila las vistas, solo las compila después de una compilación para que obtenga errores de compilación en lugar de errores de tiempo de ejecución. Tampoco hizo ninguna diferencia: sigo viendo 450ms más o menos en la primera llamada 'Url.Action'. – Keith
La precompilación correcta es posible con ASPNet_Compiler.exe (vea http://msdn.microsoft.com/en-us/library/ms229863(v=vs.80).aspx) pero incluso sin eso, estoy viendo el momento ' Url.La acción es una locura: es casi como si estuvieras haciendo una reflexión completa para encontrar las acciones del controlador cada vez que se ejecuta la página. – Keith
¿Podría mostrar sus RegisterRoutes (desde global.asax)? Puede aprovechar su tiempo. –