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

Trzymaj każdą starą odpowiedź HttpWebRequest w zakresie, który dopełnia jej zużycie i ją zwalnia. Tutaj destination to zapisywalny strumień wyjściowy aplikacji; blok using zwalnia WebResponse nawet jeśli kopiowanie się nie powiedzie, bez przejmowania własności tego wyjścia.

To, że jedno żądanie proxy się powiedzie, a kolejne czekają, może wskazywać na niedokończone odpowiedzi zajmujące zasoby połączeń. Samo otrzymanie WebResponse nie kończy jego treści. Limit czasu żądania ogranicza oczekiwanie, a nie czas życia każdej już uzyskanej odpowiedzi.

Zastosuj tę samą własność do błędów. WebException może nieść odpowiedź, którą kod sprawdza; zamknij ją po sprawdzeniu. Awaria transportu może w ogóle nie mieć odpowiedzi.

Zwolnienie oddaje zasoby odpowiedzi, ale nie obiecuje w każdym przypadku połączeń wielokrotnego użytku. Protokół, serwer i zużycie treści nadal mają znaczenie.

Dotyczy to utrzymania starego stosu WebRequest. W nowszym kodzie podążaj za własnością odpowiedzi/strumienia rzeczywistego klienta; w przypadku HttpClient trzymaj odpowiedzi w ich zakresie zwalniania i odróżniaj tę awarię czyszczenia od uwierzytelniania proxy lub wyboru trasy.

Powiązane artykuły