using (WebResponse response = request.GetResponse())
{
    response.GetResponseStream().CopyTo(destination);
}

Mantenga cada respuesta heredada de HttpWebRequest en un ámbito que termine de consumirla y la libere. Aquí destination es el flujo de salida escribible de la aplicación; el bloque using libera el WebResponse incluso si la copia falla, sin asumir la propiedad de esa salida.

Que una solicitud de proxy tenga éxito y las posteriores esperen puede indicar respuestas inacabadas que ocupan recursos de conexión. Recibir el WebResponse no termina su cuerpo. El tiempo de espera de la solicitud limita una espera, no la vida útil de cada respuesta ya obtenida.

Aplique la misma propiedad a los errores. Una WebException puede llevar una respuesta que su código inspeccione; ciérrela tras inspeccionarla. Un fallo de transporte puede no tener respuesta alguna.

La eliminación libera los recursos de la respuesta pero no promete conexiones reutilizables en todos los casos. El protocolo, el servidor y el consumo del cuerpo siguen importando.

Esto concierne al mantenimiento de la pila WebRequest heredada. En código más reciente siga la propiedad de respuesta/flujo del cliente real; para HttpClient, mantenga las respuestas dentro de su ámbito de eliminación, y distinga este fallo de limpieza de la autenticación del proxy o de la selección de ruta.

Artículos relacionados