Pregunta

Estoy utilizando Redgate perfilador de rendimiento poner a prueba mi asp.net mvc 2 solicitud. Una de las cosas que descubrí fue el XMLSerializer estaba tomando demasiado del tiempo de CPU por lo que se refiere a este post . Lo cambié a donde utiliza XmlSerializerCache ahora.

Ahora el tema XmlSerializer ya no está allí y estoy perfilando la aplicación mediante la simulación de 80 usuarios al mismo tiempo utilizando la página web con Jmeter. Así que ahora los métodos principales que toman el tiempo están haciendo un FirstOrDefault() en algunos datos estoy tirando yo daré ejemplo-

var values=(from c in DataContext.Table1
           join s in DataContext.Table2 on new { c.Id, c.date } 
            equals new { s.Id, s.date } into list
                          where c.Id== Id && c.date == date
                          from s in list.DefaultIfEmpty()
                          select new DayDTO()
                          {
                              Points = c.points,
                              Points1 = c.points1,
                              Points2 = c.points2,
                              Points3 = c.points3,
                              Points4 = c.points4
                          }).FirstOrDefault();

¿alguien puede sugerir lo que puedo hacer para mejorar esto? Los tiempos actuales son de 25 segundos y 16 segundos para los mejores métodos 2 .. ¿Es sólo porque Estoy simulando 80 usuarios al mismo tiempo y hay algunos problemas en la base de datos (SQL Server 2005) como parte de la mesa es demasiado grande y la indexación etc ... y voy a mirar en eso, pero actualmente estoy tratando de identificar cualquier problema que se ve con el código es decir, cuestiones sobre C # lado ..

Le agradecería cualquier ayuda gracias!

¿Fue útil?

Solución

Esto supone que el tiempo superior es el "tiempo incluido", no el "tiempo exclusivo".

medios de disyuntiva que incluye cualquier código llamado por el método, en este caso el FirstOrDefault ejecutará la llamada base de datos. las llamadas bases de datos son caros en el contexto de la latencia, pero el hilo de la CPU está bloqueado y no usar la CPU a la espera de la llamada base de datos.

En primer lugar usted debe preguntarse si esto es un problema, que no afecta significativamente el rendimiento (suponiendo que el servidor de base de datos puede manejar la carga), pero la latencia de las llamadas.

Si esto es un problema que necesita para acelerar la consulta SQL real. Usted debe comenzar el Analizador de SQL, coger la pregunta real, a continuación, ejecutarlo en el estudio de administración de SQL. Mira el plan de ejecución para ver si la consulta es más lento de lo esperado y tratar de averiguar por qué. Si es demasiado lento se podría verificar su indexación para empezar.

Otros consejos

FirstOrDefault probablemente se llamó como el culpable, simplemente porque es el método que está obligando enumeración en su caso. Si usted lanzó en un .ToList () antes de ella, que iba a encontrar el cambio de carga para .ToList ().

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