2009-07-08 17 views
9

Estoy perplejo. Miré el rastro de una llamada de página que era "lenta" para cargar según mi jefe, haciendo que la página se cargara parcialmente, y luego "saltara" al lugar de desplazamiento memorizado en una devolución de datos.¿Qué causa que una página rinda lenta?

Al final descubrí, usando mi rastreo, que toda mi carga, desde Begin PreInit hasta End Render, tomó 1,94 segundos, de los cuales 1,5 se gastaron entre Begin PreRender y End PreRender.

¿Alguna idea sobre qué podría causar eso? El siguiente tiempo de carga más grande es 0.14 segundos, para End PreRenderComplete.

¿El problema puede deberse a mis consultas a SQL Server, o a una cantidad demasiado grande de controles en la página, aunque la mayoría están "ocultos"?

[Editar:] Parece que la carga de mi página es muy larga cuando muestro una cierta forma. Mi tamaño total de renderizado es de 91537 bytes, 44483 de los cuales están dedicados a ese formulario específico. Mi viewstate parece algo enorme. Además: ¿Puede un 404 a un archivo JS causar ese tipo de retraso en la carga?

[update:] Encontré la consulta más antigua y parece que, aunque parece bastante gruesa, ha terminado mucho antes de que la página esté cargada. Como información adicional: estoy usando bastante SqlDataSources a través de los controles, para llenar mis listas desplegables y otras cosas interesantes similares. ¿Eso está abarrotando mi aplicación?

+0

después de leer su actualización Todavía creo que necesita ver esto en un generador de perfiles para estar seguro. –

Respuesta

6

Según mi experiencia (el mismo problema que usted), es un 90% un problema de SQL.

Ponga algunos cronómetros en la consulta que está llamando para averiguar qué consulta se está ejecutando lentamente.

representar controles asp.net no puede tomar tanto tiempo ....

+0

Renderizar controles ASP.NET PUEDE llevar mucho tiempo teniendo en cuenta que un control puede ser bastante complicado (piense en algunos de los componentes de Telerik ajax, etc.). –

+0

Estoy de acuerdo con esto. Especialmente si está utilizando cualquiera de los controles de Fuente de datos. Ejecute el Analizador de SQL mientras ejecuta la aplicación. – NotMe

+0

¡Oh, tan SQLDataSource! = ¿Buena idea? –

4

Para identificar la causa de un cuello de botella, realmente debe perfilar su código con una herramienta como ANTS Profiler o algo similar.

Un generador de perfiles le permitirá identificar el área del problema mostrándole qué líneas de código son más lentas que otras.

+2

¿Algo que no tenga que gastar 400 dólares para encontrar un solo problema en esta aplicación?: P –

+2

Pensé que puedes probar ANTS Profiler simplemente descargándolo :). Del mismo modo, puede descargar la versión de prueba de Visual Studio y también proporcionar el perfil de VS de forma gratuita. –

+1

He utilizado una versión de prueba de ANTS Profiler, así como el Asistente de rendimiento de Visual Studio y encontré que son comparables de muchas maneras. –

3

me gustaría utilizar YSlow para determinar si es de algo en el lado del cliente o del lado del servidor. A veces agregamos temporizadores a algunas consultas y luego emitimos el tiempo para ejecutarlo en un comentario html ... por supuesto quitándolos cuando la prueba se completa.

¿La página llama a algo alojado en un sitio externo?

+1

si el problema se puede remontar a algún lugar entre preinit y endrender, probablemente no hay mucho que YSLOW pueda hacer en este caso particular. pero voy a decir que todavía es una buena herramienta y una respuesta relevante a la pregunta más genérica en el título –

0

Su mejor opción es utilizar el Perfomance Wizard in Visual Studio y mirar el árbol de llamadas de su página. Le dará más detalles sobre el cuello de botella de rendimiento exacto.

He visto este tipo de rendimiento cuando hay demasiados controles complejos declarados en la página. Aunque también podría estar relacionado con SQL. Para estar seguro, debe consultar el árbol de llamadas y averiguar cuál es la llamada más cara.

0

Por supuesto, si está relacionado con sql, como mucha gente ha notado, "sql server profiler" es la herramienta a usar (dado que está ejecutando mssql). mysql tiene "jetprofiler" (.com) que no he probado. una vez que encuentre la consulta lenta, no es raro que sea un problema de indexación.

Cuestiones relacionadas