
12/05/2011, 07:54
|
| | Fecha de Ingreso: noviembre-2008
Mensajes: 19
Antigüedad: 16 años, 4 meses Puntos: 0 | |
Rendimiento malísimo en servidor! Buenos días a todos,
sé que es una cuestión que se nos plantea a menudo, pero llevo semanas buscando información y no logro optimizar mi aplicación, la desesperación llama a mi puerta.
Estoy desarrollando una pequeña aplicación web asp.net 2.0/ c# cuya funcionalidad básica es hacer una consulta a BBDD, y con la información obtenida
generar código html (un menú) que posteriormente insertaremos en la página aspx. Es decir, un menú dinámico. Esta página es abierta mediante un window.open de javascript situado en un directorio virtual diferente.
En local va bien, pero en producción funciona penosamente. Desde que me abre la nueva ventana, hasta que me muestra el contenido pasan unos 20 segundos para la primera carga POR CADA MÁQUINA. En posteriores recargas tarda 1 o 2 segundo. Si cierro la aplicación y la vuelvo a abrir, sigue funcionando bien, hasta que pase cierto tiempo ¿media hora o menos? que de nuevo la primera carga tarda mucho.
Como nota curiosa, cuando me abre la página, durante el lapso de tiempo que parece que "no hace nada" está el puntero del ratón con la flechita y el reloj de "trabajando", luego se quita el reloj y a los dos segundo por fín aparece la página, no sé que hace en ese tiempo.
El servidor es virtual, está montado bajo un iis 6.0 en windows server 2003 con su propio application pool. Hay otras aplicaciones funcionando decentemente.
En seguida pensaréis que el cuello de botella son las consultas a BBDD, pero lo he llevado más al límite, comento toda la generación del menú y las consultas y le meto a pelo la cadena que tiene que generar como variable. Es decir, únicamente quiero representar una cadena html que tengo en c# en un aspx.
Cosas que he probado sin resultado:
- Servidor
- Quitar el reciclado al application pool (parece que mejora)
- Ponerle como máximo 1mb de paginación al application pool
- Dejarle un máximo de 90% de la cpu (no llega a utilizar tanta)
- Poner el directorio virtual a sólo secuencia de scripts (esto parece que mejora)
- He montado la solución en otro servidor, quizás vaya algo mejor, pero sigue fatal
- Me he planteado si al ser servidores virtuales con peores velocidades de lectura/escritura en disco, podría tener que ver, pero eso afectaria a todas las aplicaciones no sólo a la mía.
- Habilito el traceo en servidor y desde el prerender hasta el end page_load en servidor me da tiempo de 2 o 3 segundos como mucho, y en realidad esta tardando más de 16-20'', según le da
- Código
- Intentar ponerle directivas de cacheo en servidor (sin resultado)
- Quitar el contenido del app_code y meterlo directamente en el .cs de la página, sin resultado. Finalmente ya ni útilizo esas funciones, ya sólo quiero que no tarde en representar una variable con contenido que tengo metida a pelo
- Al principio metía el contenido html en un control literal, ahora lo meto directamente como variable string de servidor
- La cadena html la genero con un stringbuilder y la pasaba como cadena, he intentado pasarla del stringbuilder a un HtmlTextWriter y de éste a la página aspx pero no mejora
- En el aspx, con javascript, creo dos muescas del tiempo al principio y al final del código, y como mucho me da tiempos de un segundo, es decir entre c# y asp+js como mucho debería tardar 4 segundos en el peor de los casos, que es lo que me puede tardar en local
- Me he llevado la página directamente al directorio virtual en el que se encuentra la página llamante, sigue tardando
Si tardase la primera generación de un único usuario, lo entendería, pero tardar una vez por usuario es rarísimo no??? He invertido más de un mes de trabajo en un código que requiere de este menú, así que imaginaos mi grado de desesperación.
Cualquier sugerencia será muy bienvenida, gracias por vuestro tiempo. |