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

Дръжте всеки стар отговор HttpWebRequest в обхват, който довършва консумирането му и го освобождава. Тук destination е изходният поток за запис на приложението; блокът using освобождава WebResponse дори ако копирането се провали, без да поема собственост върху този изход.

Успехът на една прокси заявка и изчакването на следващите може да означава недовършени отговори, които заемат ресурси за връзка. Самото получаване на WebResponse не довършва тялото му. Изчакването на заявката ограничава чакането, а не живота на всеки вече получен отговор.

Приложете същата собственост и към грешките. WebException може да носи отговор, който кодът ви преглежда; затворете го след прегледа. Транспортна повреда може да няма никакъв отговор.

Освобождаването връща ресурсите на отговора, но не обещава връзки за повторно използване във всеки случай. Протоколът, сървърът и консумирането на тялото все още имат значение.

Това засяга поддръжката на стария стек WebRequest. В по-новия код следвайте собствеността на отговора/потока на действителния клиент; за HttpClient дръжте отговорите в обхвата им за освобождаване и разграничавайте тази повреда при почистването от удостоверяването на прокси или избора на маршрут.

Подобни статии