मैंने एक बार क्रॉलर को .NET में लिखा था। इसकी स्केलेबिलिटी में सुधार करने के लिए, मैंने .NET के एसिंक्रोनस एपीआई का लाभ उठाने का प्रयास किया।.NET विश्वसनीय Asynchronouos सॉकेट संचार नहीं है?
सिस्टम.Net.HttpWebRequest में एसिंक्रोनस एपीआई BeginGetResponse/EndGetResponse है। हालांकि, एपीआई की यह जोड़ी सिर्फ एक HTTP प्रतिक्रिया शीर्षलेख और एक स्ट्रीम उदाहरण प्राप्त करने के लिए है जिससे हम HTTP प्रतिक्रिया सामग्री निकाल सकते हैं। इसलिए, मेरी रणनीति BeginGetResponse/EndGetResponse को असीमित रूप से प्रतिक्रिया स्ट्रीम प्राप्त करने के लिए उपयोग करना है, फिर प्रतिक्रिया स्ट्रीम उदाहरण से असीमित रूप से बाइट प्राप्त करने के लिए BeginRead/EndRead का उपयोग करें।
क्रॉलर तनाव परीक्षण तक जाने तक सबकुछ सही लगता है। तनाव परीक्षण के तहत, क्रॉलर उच्च स्मृति उपयोग से पीड़ित है। मैंने WinDbg + SoS के साथ मेमोरी की जांच की है और यह बताता है कि कई बाइट एरे सिस्टम द्वारा रेंगते हैं। थ्रेडिंग। ओवरलैप्डडेटा उदाहरण। इंटरनेट में कुछ खोज करने के बाद, मुझे माइक्रोसॉफ्ट से यह KB http://support.microsoft.com/kb/947862 मिला।
केबी के अनुसार, एसिंक्रोनस I/O की संख्या में "ऊपरी सीमा" होनी चाहिए, लेकिन यह "सुझाए गए" बाध्य मान को नहीं बताती है। तो, मेरी आंख में, यह केबी कुछ भी मदद नहीं करता है। यह स्पष्ट रूप से एक .NET बग है। अंत में, मुझे प्रतिक्रिया स्ट्रीम से एसिंक्रोनस निकालने वाले बाइट्स करने के लिए विचार छोड़ना है, और बस इसे तुल्यकालिक तरीके से करें।
नेट पुस्तकालय है कि डॉट नेट सॉकेट साथ अतुल्यकालिक आईओ की अनुमति देता है (Socket.BeginSend/ Socket.BeginReceive/ NetworkStream.BeginRead/ NetworkStream.BeginWrite) की मात्रा पर ऊपरी बाध्य होना आवश्यक है बफर बकाया (या तो भेजें या प्राप्त करें) उनके एसिंक्रोनस आईओ के साथ।
नेटवर्क आवेदन की बकाया अतुल्यकालिक आईओ है कि यह पोस्ट संख्या पर ऊपरी सीमा होनी चाहिए।
संपादित करें: कुछ प्रश्न चिह्न जोड़ें।
किसी को भी सॉकेट & नेटवर्कस्ट्रीम पर एसिंक्रोनस I/O करने का कोई अनुभव है? आम तौर पर, सिंक्रोनस या असिंक्रोनोसली के साथ इंटरनेट के साथ उत्पादन में क्रॉलर I/O करता है?
विषय को छोड़कर एक सिग्नल प्रश्नचिह्न नहीं ... एक बुरा संकेत। –