मैं ऐसे एप्लिकेशन पर काम कर रहा हूं जिसके लिए एक प्रकार का संदेश डेटाबेस पर हिट करने के लिए आवश्यक है, और अन्य प्रकार के संदेश को जाने और कुछ बाहरी xml एपीआई को हिट करने के लिए आवश्यक है।HttpWebRequest और I/O पूरा होने वाले बंदरगाह
मुझे ए लॉट को संसाधित करना है ... बड़ी चुनौतियों में से एक है HttpWebRequest क्लास अच्छी तरह से प्रदर्शन करना है। मैंने शुरुआत में मानक सिंक्रोनस विधियों और पूरी चीज को थ्रेडपूल करने के साथ शुरू किया। यह अच्छा नहीं था।
तो कुछ पढ़ने के बाद मैंने देखा कि ऐसा करने का अनुशंसित तरीका आईओ पूरा करने वाले बंदरगाहों को काम सौंपने के लिए आरंभ/समाप्ति विधियों का उपयोग करना था, इस प्रकार थ्रेडपूल को मुक्त करना और बेहतर प्रदर्शन प्रदान करना। यह मामला प्रतीत नहीं होता है ... प्रदर्शन मामूली रूप से बेहतर है लेकिन मैं निश्चित रूप से थियोपूल की तुलना में आईओ पूरा होने वाले बंदरगाहों का उपयोग नहीं कर सकता।
मेरे पास एक थ्रेड है जो गोल करता है और मुझे थ्रेडपूल में उपलब्ध कार्यकर्ता थ्रेड + समापन बंदरगाह भेजता है। पूरा बंदरगाह हमेशा बहुत कम होता है (अधिकतम मैंने देखा 9 उपयोग किया जाता है) और मैं हमेशा 120 कार्यकर्ता धागे (कभी-कभी अधिक) का उपयोग कर रहा हूं।
Begin/EndGetRequestStream
Begin/EndWrite (Stream)
Begin/EndGetResponse
Begin/EndRead (Stream)
मैं इसे ठीक कर रहा हूँ: मैं httpwebrequest
में सभी तरीकों के लिए शुरू/अंत पैटर्न का उपयोग करें? क्या मैं कुछ भूल रहा हूँ? मैं (कभी-कभी) 2048 HTTP कनेक्शन तक (नेटस्टैट आउटपुट से) का उपयोग कर सकता हूं - पूरा पोर्ट नंबर इतना कम क्यों होगा?
अगर कोई इस प्रबंध कार्यकर्ता धागे, पूरा होने वाले बंदरगाहों और httpwebrequest
के साथ अच्छा प्रदर्शन करने के बारे में कुछ गंभीर सलाह दे सकता है तो इसकी अत्यधिक सराहना की जाएगी!
संपादित करें: .NET इस के लिए एक उचित उपकरण है? क्या मुझे .NET और System.Net स्टैक के साथ काम कर रहे HTTPconnections की उच्च मात्रा मिल सकती है? WinHttp (या कुछ अन्य सी ++ लाइब्रेरी) जैसे कुछ का उपयोग करने का सुझाव दिया गया है, और इसे .NET से PInvoke करें, लेकिन यह ऐसा कुछ नहीं है जिसे मैं विशेष रूप से करना चाहता हूं! यह केवल "व्यस्त" जब डेटा नहीं दिया गया है और पर कार्रवाई की जा रही है -
क्या आपकी बाहरी एपीआई लोड को उचित तरीके से संभालने वाली है? मेरे पास एक बाहरी सेवा है जिसका उपयोग मैं करता हूं कि यदि मैं बहुत से अनुरोध भेजता हूं तो सेवा सर्वर पर प्रदर्शन का एक मापनीय degredation है। – btlog
@btlog -> हाँ, जैसे कि मैं कुछ बाहरी प्रदाताओं को अक्षम करता हूं अन्य प्रदाता बेहतर समय प्रदान करते हैं (लेकिन कॉल की समान मात्रा प्राप्त करते हैं)। अगर समस्या उनके पक्ष में मात्रा थी तो इससे कोई फर्क नहीं पड़ता कि मैंने अन्य एक्सएमएल सेवाओं के साथ क्या किया है, इससे दूसरों को प्रभावित नहीं होगा। – peteisace