Pregunta

Tengo una vista asp.net / página (dinámico) que se construye de Html.RenderPartials anidados. La vista se envía un modelo de vista adecuado para rendir.

Firebug dice que la respuesta GET para el HTML es de 9,89 segundos para 9.5KB. Comparar la página de preguntas frecuentes (estática html) del mismo sitio es de 1,3 segundos para 17K.

Al principio pensé que era la parte de atrás de SQL Entidad frenar las cosas debido a la complejidad del modelo de vista, pero parece que construir el modelo de vista en menos de 1 segundo de acuerdo a los registros de mi.

Cualquier idea por qué la vista MVC está tomando tanto tiempo para hacer por favor, y cómo puede acelerar este proceso? Estoy pensando en carga parcial a través de AJAX.

(por cierto me Gzip y el uso de CDN etc - Me han yslowed todo el sitio a la muerte)

Editar

temporizadores Añadido (cronómetro) a OnActionExecuting / OnActionExecuted y OnResultExecuting / OnResultExecuted.

09/12/2010 18:39:20: Controlador: Perfil de acción: el tiempo transcurrido Índice: 680.6431 - Acción

09/12/2010 18:39:29: Controlador: Perfil de acción: el tiempo transcurrido Índice: 9202.063 - Resultado

9 segundos para el marco para renderizar la vista.

¿Fue útil?

Solución

Problema resuelto

En primer lugar, gracias a todos por sus sugerencias. He seguido cada sugerencia y otra vez hasta que encontré el problema. Esto es lo que estaba mal, y tal vez alguien podría aclarar a los demás.

asistente de rendimiento de VS2010 estaba diciendo que cada objeto que se pasa a los PartialViews estaba ocupando gran tiempo de CPU y I presume que sea la parcial como he leído que pueden tener problemas.

foreach (ProfileComment item in Model)
{
    Html.RenderPartial("UserActivityComment", item);
}
...
Friends friend = Model.Friends.Where(e => e.ID == activity.ActionID).FirstOrDefault();
if (friend.FriendsProfile.UserName != Page.User.Identity.Name)
{
    Html.RenderPartial("UserActivityFriend.ascx", friend);
}

El objeto ProfileComment y amigos (además de otros) son parte de un modelo de vista genero y paso a la página. Ahora la máquina virtual se genera a través del marco de la entidad en menos de 0,3 segundos Así que supuse que todo estaba bien con la máquina virtual.

El enorme retraso se produjo cuando quería el fin de procesarla. El modelo en el 'bucle' se encuentra en posición, y así fue FirstOrDefault por el Asistente Performace.

Hmm extraño, el modelo se construye rápidamente pero no procesa rápidamente. Solución:

_entities.Friends.MergeOption = MergeOption.NoTracking;
_entities.ProfileComment.MergeOption = MergeOption.NoTracking;

Creo que el problema estaba extrayendo el objeto de la máquina virtual para enviar a la parcial, ya que también fue querer mantener la entidad de gestión de relaciones.

Más información en la Aia Investigación

y blogs.microsoft.co.il/blogs/gilf/archive/2009/02/20/disabling-change-tracking-in-entity-framework.aspx

No dude en ampliar sobre esto con más detalle. Por cierto el aumento de rendimiento fue de enorme

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top