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

Gardez chaque réponse héritée d'HttpWebRequest dans une portée qui termine sa consommation et la libère. Ici, destination est le flux de sortie inscriptible de l'application ; le bloc using libère la WebResponse même si la copie échoue, sans prendre la propriété de cette sortie.

Qu'une requête proxy réussisse et que les suivantes attendent peut indiquer des réponses inachevées qui occupent des ressources de connexion. Recevoir la WebResponse ne termine pas son corps. Le délai d'expiration de la requête limite une attente, pas la durée de vie de chaque réponse déjà obtenue.

Appliquez la même propriété aux erreurs. Une WebException peut porter une réponse que votre code inspecte ; fermez-la après inspection. Une défaillance de transport peut n'avoir aucune réponse.

La libération rend les ressources de la réponse mais ne promet pas des connexions réutilisables dans tous les cas. Le protocole, le serveur et la consommation du corps comptent toujours.

Cela concerne la maintenance de la pile WebRequest héritée. Dans du code plus récent, suivez la propriété réponse/flux du client réel ; pour HttpClient, gardez les réponses dans leur portée de libération, et distinguez cette défaillance de nettoyage de l'authentification proxy ou de la sélection d'itinéraire.

Articles similaires