Ազատեք HttpWebRequest-ի պատասխանները պրոքսի հարցումների միջև
Հին HttpWebRequest-ի պատասխաններին տվեք հստակ կյանքի տևողություն, որպեսզի կրկնվող պրոքսի հարցումները անորոշ ժամանակ չպահեն կապի ռեսուրսները։
using (WebResponse response = request.GetResponse())
{
response.GetResponseStream().CopyTo(destination);
}
Պահեք յուրաքանչյուր հին HttpWebRequest պատասխան այնպիսի շրջանակում, որը ավարտում է դրա սպառումը և ազատում այն։ Այստեղ destination-ը հավելվածի գրելի ելքային հոսքն է. using բլոկը ազատում է WebResponse-ը նույնիսկ եթե պատճենումը ձախողվի, առանց այդ ելքի սեփականությունը վերցնելու։
Մեկ պրոքսի հարցումը հաջողվելը և հաջորդների սպասելը կարող է նշանակել անավարտ պատասխաններ, որոնք զբաղեցնում են կապի ռեսուրսները։ Միայն WebResponse ստանալը չի ավարտում դրա մարմինը։ Հարցման ժամկետը սահմանափակում է սպասումը, ոչ թե արդեն ստացված յուրաքանչյուր պատասխանի կյանքի տևողությունը։
Կիրառեք նույն սեփականությունը սխալների նկատմամբ։ WebException-ը կարող է կրել պատասխան, որը ձեր կոդը ստուգում է. փակեք այն ստուգումից հետո։ Տրանսպորտի ձախողումը կարող է ընդհանրապես պատասխան չունենալ։
Ազատումը վերադարձնում է պատասխանի ռեսուրսները, բայց ամեն դեպքում չի խոստանում վերօգտագործելի կապեր։ Արձանագրությունը, սերվերը և մարմնի սպառումը դեռևս կարևոր են։
Սա վերաբերում է հին WebRequest կույտի պահպանմանը։ Նոր կոդում հետևեք իրական հաճախորդի պատասխան/հոսք սեփականությանը. HttpClient-ի դեպքում՝ պահեք պատասխանները դրանց ազատման շրջանակում, և այս մաքրման ձախողումը տարբերեք պրոքսի նույնականացումից կամ երթուղու ընտրությունից։