HttpClientको कई कॉल के लिए फिर से उपयोग करने के लिए डिज़ाइन किया गया है । यहां तक कि कई धागों में भी। HttpClientHandlerसाख और कुकीज़ है कि पुन: उपयोग किए कॉल भर में करने का इरादा कर रहे हैं। एक नया HttpClientउदाहरण होने से उस सभी सामान को फिर से सेट करना पड़ता है। यह भीDefaultRequestHeaders संपत्ति में कई कॉल के लिए इच्छित गुण हैं। प्रत्येक अनुरोध पर उन मानों को रीसेट करने से बिंदु को हराया जाता है।
एक अन्य प्रमुख लाभ क्रॉस कटिंग चिंताओं को लागू करने के लिए अनुरोध / प्रतिक्रिया पाइपलाइन में HttpClientजोड़ने की क्षमता है HttpMessageHandlers। ये लॉगिंग, ऑडिटिंग, थ्रोटलिंग, रीडायरेक्ट हैंडलिंग, ऑफलाइन हैंडलिंग, मेट्रिक्स कैप्चरिंग के लिए हो सकते हैं। हर तरह की अलग चीजें। यदि प्रत्येक अनुरोध पर एक नया HttpClient बनाया जाता है, तो इन सभी संदेश संचालकों को प्रत्येक अनुरोध पर सेटअप करने की आवश्यकता होती है और किसी भी तरह से किसी भी स्तर की स्थिति जो इन हैंडलर्स के अनुरोधों के बीच साझा की जाती है, को भी प्रदान करने की आवश्यकता होती है।
जितना अधिक आप सुविधाओं का उपयोग करते हैं HttpClient, उतना ही आप देखेंगे कि मौजूदा उदाहरण का पुन: उपयोग करना समझ में आता है।
हालांकि, मेरी राय में, सबसे बड़ा मुद्दा यह है कि जब एक HttpClientवर्ग का निपटान किया जाता है, तो वह निपटता है HttpClientHandler, जो तब जबरन उन TCP/IPकनेक्शनों के पूल में कनेक्शन को बंद कर देता है जो उसके द्वारा प्रबंधित किया जाता है ServicePointManager। इसका मतलब यह है कि नए के साथ प्रत्येक अनुरोध को HttpClientनए TCP/IPकनेक्शन को फिर से स्थापित करने की आवश्यकता होती है ।
मेरे परीक्षणों से, LAN पर सादे HTTP का उपयोग करके, प्रदर्शन हिट काफी नगण्य है। मुझे इस पर संदेह है क्योंकि एक अंतर्निहित टीसीपी रखवाली है जो HttpClientHandlerइसे बंद करने की कोशिश करने पर भी कनेक्शन खुला रखती है।
इंटरनेट पर जाने के अनुरोध पर, मैंने एक अलग कहानी देखी है। मैंने हर बार अनुरोध को दोबारा खोलने के कारण 40% प्रदर्शन देखा है।
मुझे लगता है कि एक HTTPSकनेक्शन पर हिट और भी बदतर होगी।
मेरी सलाह है कि प्रत्येक विशिष्ट एपीआई के लिए अपने एप्लिकेशन के जीवनकाल के लिए HttpClient का एक उदाहरण रखें, जिससे आप कनेक्ट होते हैं।
Stopwatchइसे बेंचमार्क करने के लिए क्लास का उपयोग कर सकते हैं , हालाँकि। मेरा अनुमान यह होगा कि एकल होना अधिक मायने रखता हैHttpClient, यह मानते हुए कि उन सभी उदाहरणों को एक ही संदर्भ में उपयोग किया जाता है।