2012-09-26 14 views
5

समस्या: मुझे विभिन्न होस्टों से सैकड़ों छवियों को डाउनलोड करने की आवश्यकता है। प्रत्येक होस्ट में 20-सैकड़ों छवियों के बीच कहीं भी है।क्या वेब क्लाइंट http डेटा डाउनलोड करने का सबसे अच्छा तरीका है?

समाधान: new WebClient का उपयोग करके हर बार किसी छवि को WebClient's DownloadData विधि के माध्यम से डाउनलोड करने की आवश्यकता होती है।

या ओपन सॉकेट कनेक्शन का पूल रखने और निचले स्तर के कॉल का उपयोग करके http अनुरोध करने के लिए बेहतर होगा?

क्या टीसीपी कनेक्शन खोलना/बंद करना महंगा है (मुझे लगता है कि वेब क्लाइंट क्या करता है), ताकि पूल का उपयोग करके अधिक कुशल लगता है?

+0

बेस्ट कोड कोड है जो आपको आवश्यकतानुसार त्रुटियों के बिना आवश्यक परिणाम प्राप्त करता है। तो क्या आप इस बात पर टिप्पणी कर सकते हैं कि आपके वर्तमान कोड की तुलना में सुधार की आवश्यकता है (मान लीजिए कि आपने अनुमान लगाया है कि आप छवियों को कितनी तेजी से डाउनलोड कर सकते हैं और आपके वर्तमान कोड डाउनलोड आपके लक्ष्यों की तुलना में धीमे हैं लेकिन नेटवर्क सीमा तक पहुंचने तक कुछ सुधार करने के लिए कुछ जगह है)। –

+0

मुझे यह जोड़ना चाहिए था कि गति सबसे ज्यादा चिंता का विषय है। – sanjosep43

+0

+1 बहुत ही रोचक सवाल। –

उत्तर

6

मेरा मानना ​​है कि अंतर्निहित बुनियादी ढांचा WebClient उपयोग पहले से ही HTTP कनेक्शन पूल करेगा, इसलिए ऐसा करने की कोई आवश्यकता नहीं है। आप कुछ नमूना यूआरएल के साथ, निश्चित रूप से Wireshark जैसे कुछ का उपयोग करना जांच सकते हैं।

मूल रूप से, मैं इसे अन्य प्रोग्रामिंग कार्यों के साथ समान दृष्टिकोण लेता हूं - कोड को सबसे सरल तरीके से लिखें, और फिर जांचें कि यह आपकी आवश्यकताओं के लिए पर्याप्त प्रदर्शन करता है या नहीं। यदि ऐसा होता है, तो आप कर चुके हैं। यदि ऐसा नहीं होता है, तो क्यों काम करने के लिए उचित उपकरण (नेटवर्क विश्लेषक आदि) का उपयोग करें यह पर्याप्त प्रदर्शन नहीं कर रहा है, और समस्या को ठीक करने पर केवल अधिक जटिल कोड का उपयोग करें।

मेरा अनुभव यह है कि WebClient ठीक है अगर आपको इसकी आवश्यकता नहीं है - लेकिन यह आपको WebRequest के रूप में काफी बढ़िया नियंत्रण नहीं देता है। यदि आपको पर की आवश्यकता नहीं है, तो WebClient पर जाएं।

+0

धन्यवाद। मुझे नहीं लगता था कि वेब क्लाइंट पूल का उपयोग करेगा। मुझे इसे वायरशर्क के साथ देखना होगा। इसके अलावा मैंने आपकी पुस्तक पढ़ी जो बहुत अच्छी थी! – sanjosep43

+0

@ user261490 जॉन की पुस्तक अद्भुत है, लेकिन यह टिप्पणी प्रश्न के लिए प्रासंगिक नहीं है। कृपया अपनी टिप्पणियों को प्रश्न या उत्तर से प्रासंगिक बनाने का प्रयास करें ताकि यह दूसरों के लिए उपयोगी होगा –

+0

@ user261490 जॉन यहां पर सही है। विचार करने की एक बात एमएस से [समानांतर पुस्तकालय] (http://msdn.microsoft.com/en-us/library/dd460720.aspx) को देखकर है जिसे आप चुनते हैं। यह आपको बैंडविड्थ द्वारा सीमित कई धागे पर डाउनलोड करने की अनुमति देगा। सुनिश्चित करें कि जब आप भी कर लेंगे तो कनेक्शन बंद करें() मैंने एक बार गलती की है। – iMortalitySX

0

मैं HttpWebRequest और HttpWebResponse का उपयोग किसी भी चीज़ को स्क्रैप करने के लिए करता हूं। बेशक, आवश्यकता के लिए सेवाएं उपलब्ध नहीं हैं, लेकिन फिर भी, कभी-कभी सीमाएं (व्यापार सीमाएं) होती हैं और मैं अक्सर शुद्ध http अनुरोध से एचटीएमएल खोदना पसंद करता हूं। कभी-कभी डेवलपर की तरह महसूस करें, आपको पता है ...

+3

आपने कोई कारण नहीं दिया है * क्यों * आप 'HttpWebRequest'/'HttpWebResponse' का उपयोग करते हैं, जो यह उत्तर कम से कम उपयोगी हो सकता है। –

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