2010-08-17 17 views
10

Me preguntaba si alguien tenía experiencia que podrían compartir utilizando la propiedad Response.IsClientConnected como una optimización del rendimiento para los sitios web de asp.net.¿Qué tan útil es Response.IsClientConnected?

La razón por la que pregunto es que soy un poco escéptico sobre cuán efectivo sería en escenarios de la vida real. Entiendo el concepto de verificar el valor antes de realizar una tarea grande, pero simplemente no puedo ver cuán útil sería ya que los clientes podrían desconectarse en cualquier momento.

Respuesta

9

Creo que el uso principal sería para optimizar la entrega de procesos largos. Por ejemplo, si tiene que generar un informe enorme o algo así, puede ejecutar el informe en un hilo separado y luego verificar periódicamente si el usuario todavía está conectado. De lo contrario, podría eliminar este proceso de larga ejecución para que no se ejecute innecesariamente ya que el usuario ya no espera una respuesta.

Esto ayuda a evitar que los usuarios inicien procesos largos y luego hagan más solicitudes una y otra vez porque pueden pensar que es lenta o algo así. Si no realizaba este tipo de comprobación, podría aplicar impuestos a su servidor debido a todas las solicitudes, a pesar de que todas menos una son válidas. Este escenario podría manejarse al permitir que solo un usuario ejecute una tarea de larga ejecución, pero también sería útil en un entorno multiusuario para asegurarse de que solo está pasando el tiempo atendiendo las solicitudes donde el usuario todavía está conectado y esperando la respuesta.

Nota: nunca he usado esto antes, esto se basa solo en mi comprensión básica de lo que he leído.

8

Lo he usado extensamente en mis aplicaciones y puede darle un gran ahorro de recursos.

Pruebe esto: cree una página que necesite algún tiempo para completar e intente actualizarla muchas veces antes de completarla. Verá que las solicitudes están en cola para ser ejecutadas. Imagínese un usuario que tiene una conexión lenta y actualiza su página muchas veces pensando que esto irá a la página (un problema muy común de lo que un sitio puede perder de recursos cuando todos los usuarios están conectados y por alguna razón se vuelve lento).

Ahora, cámbielo y al comienzo de cada carga de página, (o antes al inicio de la página) compruebe si HttpContext.Current.Response.IsClientConnected y en el caso de que no esté conectado, ejecute una excepción threadabord. Verá, su sitio responderá mucho antes.

En realidad, compruebo si el cliente está conectado antes de cualquier acción intensa en la página para evitar ejecuciones innecesarias. En entornos de producción, he visto que especialmente en los casos en que el sistema se vuelve lento, esta validación ayudará mucho.