2010-02-01 18 views
5

मेरे पास यूआरएल की एक दी गई सूची है, और मैं एक HTTP वेब अनुरोध ऑब्जेक्ट करता हूं, और इसके साथ कनेक्ट करने का प्रयास करता हूं, मेरे पास यूआरएल का 'सरणी' है, और मैं प्रत्येक के साथ कनेक्ट करने का प्रयास करता हूं। उद्देश्य देख रहा है कि कौन से बाहर हैं।एक पंक्ति में कई वेब अनुरोध करने का सबसे आसान तरीका क्या है?

यह पहले से ही काम करता है, लेकिन एक अनुरोध केवल अंतिम समाप्त होने के साथ ही शुरू होता है, इसलिए यह काफी धीमा काम कर रहा है, प्रति सेकंड लगभग दो अनुरोध।

मैं सोच रहा था कि मुझे पृष्ठभूमि में काम करने वाले लगभग 5 धागे बनाना चाहिए, जो इसे 5 गुना तेज कर देगा, जो वांछित गति (साझा इंटरनेट बैंड को अधिभारित करने के दौरान) होगा। लेकिन मुझे दो समस्याएं हैं:

1 - मुझे यह भी नहीं पता कि यह मेरी समस्या का सबसे अच्छा समाधान है। 2 - मैंने कुछ बार कोशिश की है, लेकिन मैं .NET ढांचे के लिए नया हूं, और कभी भी बहु-थ्रेड का उपयोग नहीं किया है। इसलिए मुझे नहीं पता कि मैं इसे आसानी से कैसे करूं।

मेरे पास एक फ़ंक्शन प्रारंभ() है, और इसके लिए यह है कि सभी यूआरएल के जांच अस्तित्व के माध्यम से जाता है।

डेटा: वीएस 08, .NET 3.5, सी #।

- [संपादित करें] -

किसी को भी मुझे बता सकते हैं कि कैसे BackgroundWorker में पांच (नहीं यथासंभव अधिक से अधिक) धागे का उपयोग करने के (कोड नमूना यदि संभव हो तो) के साथ? आखिरी प्रसंस्करण समाप्त होने के ठीक बाद शुरू करने के बारे में क्या?

उत्तर

3

पृष्ठभूमिवर्कर ऑब्जेक्ट का अनुसंधान करें। यह आपको असीमित वेब अनुरोधों को तुरंत चालू करने के लिए एकाधिक थ्रेड श्रमिकों को जन्म देने की अनुमति देगा। फिर प्रत्येक अनुरोध की स्थिति पर वापस रिपोर्ट करने के लिए रिपोर्ट प्रोग्रेस विधि का उपयोग करें।

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx http://www.dotneat.net/2009/02/10/BackgroundworkerExample.aspx http://dotnetperls.com/backgroundworker

1

यह .NET में BackgroundWorker वर्ग के लिए एक आदर्श उदाहरण है। यह पृष्ठभूमि में संभावित रूप से लंबे समय तक चलने वाले संचालन निष्पादित करने के लिए थ्रेड पूल का उपयोग करता है ताकि कॉलर को व्यक्तिगत थ्रेड निर्माण कोड से निपटने की आवश्यकता न हो।

0

मैं एक कार्यकर्ता वर्ग बनाना पसंद करता हूं जो HttpWebRequest करता है और प्रत्येक कनेक्शन के लिए इसे अपने स्वयं के धागे में शुरू करता है। अपने कार्यकर्ता वर्ग को कॉलबैक विधि का उपयोग करने के लिए सिग्नल करने के लिए उपयोग करें। मैं लंबित धागे की एक कतार और सक्रिय धागे का एक शब्दकोश का उपयोग करें। कनेक्शन विफलताओं और टाइमआउट जैसे पुनरारंभ करने योग्य चीज़ों के कारण समय-समय पर समाप्त होने वाले थ्रेड को कतार में वापस रखा जा सकता है। धागे का प्रबंधित थ्रेड आईडी धागे का ट्रैक रखने के लिए आसान है।

आप शायद भी अपने app.config को यह जोड़कर कनेक्शन के लिए आपके ऐप की अधिकतम संख्या में वृद्धि करना चाहते:

<system.net> 
    <connectionManagement> 
     <remove address="*"/> 
     <add address="*" maxconnection="10" /> 
    </connectionManagement> 
    </system.net> 

मैं 10 एक उदाहरण के रूप में चुना - आप पर प्रभाव देखने के लिए प्रयोग करने के लिए होगा थ्रूपुट, सीपीयू उपयोग, और स्मृति उपयोग।

+0

मैं वर्तमान में कुछ पृष्ठभूमिकर्मी का उपयोग कर रहा हूं, और यह काम कर रहा है, लेकिन मुझे यकीन नहीं है कि यह वास्तव में कई बार तेज़ है क्योंकि मेरे पास पृष्ठभूमिकर्मी हैं। विंडोज़ के लिए यह "app.config" भी आवेदन करता है? – Marcelo

+0

app.config Winforms के लिए काम करता है। डिफ़ॉल्ट अधिकतम कनेक्शन 2 प्रति आईपी है, जो अतिरिक्त पृष्ठभूमि कार्यकर्ताओं के प्रभाव को मास्क कर सकता है। –

0

के बजाय स्पष्ट रूप से नए सूत्र अपने आप को शुरू करने एसिंक्रोनस प्रत्येक अनुरोध को निष्पादित करने HttpWebRequest.BeginGetResponse() विधि का उपयोग करें, और एक कॉलबैक विधि को निर्दिष्ट:

http://www.developerfusion.com/code/4654/asynchronous-httpwebrequest/

प्रतिक्रिया कॉल करने के लिए याद रखें।कॉलबैक विधि में बंद करें() ताकि समवर्ती कनेक्शन की अधिकतम संख्या पार न हो। यह अधिकतम कनेक्शन को बढ़ाने के लिए बेहतर है app.config, जो आरएफसी दिशानिर्देशों (अधिकतम कनेक्शन = 2) के खिलाफ है।

एक मोटा गाइड के रूप में, मैं इस विधि का उपयोग कर 5 सेकंड की अवधि में प्रति सेकंड 8 अनुरोध निष्पादित कर सकता हूं।

+0

एक विनफॉर्म एप्लिकेशन के बारे में क्या, वेबरेक्स्ट को अधिकतम करने का कोई तरीका है? मैंने 15 श्रमिकों को रखा है (आपके उत्तर पोस्ट करने से पहले इसे सब कुछ बनाया है) और यह 15x तेज नहीं है .. मैं लगभग 5 बार कहूंगा। क्या यह अधिकतम वेबक्रॉक्स्ट संख्या सीमा Winform अनुप्रयोग पर लागू है? मैं इसे कैसे उठा सकता हूं? – Marcelo

+0

मेरी पोस्ट Winform या वेब ऐप्स के लिए विशिष्ट नहीं है - केवल अंतर यह है कि कोई भी कॉन्फ़िगरेशन परिवर्तन web.config की बजाय app.config (winform) में जाएगा। यह भी याद रखें कि धागे की संख्या में वृद्धि करने से आपको एक रैखिक प्रदर्शन लाभ नहीं मिलेगा, क्योंकि आप अन्य बाधाओं से बंधे हैं (धागे सीपीयू समय जैसे समान संसाधन साझा कर रहे हैं)। – Dunc

संबंधित मुद्दे

 संबंधित मुद्दे