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

החזיקו כל תגובת HttpWebRequest מדור קודם בהיקף שמסיים את צריכתה ומשחרר אותה. כאן destination הוא זרם הפלט הכתיב של היישום; בלוק using משחרר את ה-WebResponse גם אם ההעתקה נכשלת, בלי להשתלט על הבעלות של אותו פלט.

הצלחה של בקשת פרוקסי אחת והמתנה של הבאות יכולות להעיד על תגובות לא גמורות שתופסות משאבי חיבור. עצם קבלת WebResponse אינה מסיימת את הגוף שלו. פסק הזמן של הבקשה מגביל המתנה, לא את אורך החיים של כל תגובה שכבר התקבלה.

החילו את אותה בעלות גם על שגיאות. WebException עשוי לשאת תגובה שהקוד שלכם בודק; סגרו אותה לאחר הבדיקה. כשל תעבורה עשוי שלא להיות לו תגובה כלל.

שחרור מחזיר את משאבי התגובה אך אינו מבטיח חיבורים לשימוש חוזר בכל מקרה. פרוטוקול, שרת וצריכת הגוף עדיין חשובים.

זה נוגע לתחזוקת מחסנית ה-WebRequest הוותיקה. בקוד חדש יותר עקבו אחר בעלות התגובה/הזרם של הלקוח בפועל; עבור HttpClient, החזיקו תגובות בהיקף השחרור שלהן, והבדילו כשל ניקוי זה מאימות פרוקסי או מבחירת מסלול.

מאמרים קשורים