मैं HttpWebResponse.GetResponse() और Streamreader.ReadToEnd() का उपयोग करके C# (केवल कुछ सौ साइटों के लिए) में सीमित वेब क्रॉलर को लागू करने का प्रयास कर रहा हूं, StreamReader का उपयोग करने का भी प्रयास किया। पढ़ें() और मेरी एचटीएमएल स्ट्रिंग बनाने के लिए एक पाश।HTTPWebResponse + StreamReader बहुत धीमा
मैं केवल उन पृष्ठों को डाउनलोड कर रहा हूं जो लगभग 5-10K हैं।
यह सब बहुत धीमी है! उदाहरण के लिए, औसत GetResponse() समय लगभग आधे सेकेंड है, जबकि औसत StreamREader.ReadToEnd() समय लगभग 5 सेकंड है!
सभी साइटें बहुत तेज़ी से होनी चाहिए, क्योंकि वे मेरे स्थान के बहुत करीब हैं, और तेज़ सर्वर हैं। (एक्सप्लोरर में डी/एल के लिए व्यावहारिक रूप से कुछ नहीं लेता है) और मैं किसी भी प्रॉक्सी का उपयोग नहीं कर रहा हूं।
माई क्रॉलर के पास एक ही साइट से एक साथ पढ़ने के बारे में 20 धागे हैं। क्या इससे कोई समस्या हो सकती है?
मैं StreamReader को कैसे कम कर सकता हूं। हाल ही में पढ़ें?
WebClient का उपयोग कर की कोशिश की, एक ही परिणाम (औसत बार नहीं बदला है)। मुझे यह भी जिक्र करना चाहिए कि मेरे पास 180 केबीपीएस की औसत डी/एल गति के साथ 1.5 एमबीपीएस कनेक्शन है, मैं सोच रहा था कि शायद 20 धागे स्ट्रीमरडर को कॉल कर रहे हैं। उसी समय पढ़ें इसके साथ कुछ करने के लिए कुछ हो सकता है? या यह अप्रासंगिक है? – Roey
मेरे अनुभव में, इस तरह के कनेक्शन पर आप बैंडविड्थ को 3-4 धागे से संतृप्त करेंगे। जब तक आप जिन वेबसाइटों को पिंग कर रहे हैं, तब तक और अधिक चलाने की आवश्यकता नहीं है जब तक कि आप पिंगिंग नहीं कर रहे हैं और आपके पास थ्रेड सो रहे हैं, I/O पर प्रतीक्षा कर रहे हैं। – kgriffs
वाह !!! मैं प्रति सर्वर लगभग 300 धागे के साथ परीक्षण सर्वर लोड करने के लिए async HttpWebRequest का उपयोग कर रहा था और प्रत्येक थ्रेड "क्रमशः" डाउनलोड कर रहा था। बदलते अधिकतम कनेक्शन सेटिंग प्रत्येक थ्रेड डाउनलोड डेटा 10x तेज बना दिया। –