2012-03-17 21 views
8

मैं NetworkStream.BeginRead का उपयोग Socket से असीमित रूप से पढ़ने के लिए कर रहा हूं।क्या एसिंक पढ़ने के लिए बुफेर्डस्ट्रीम के साथ नेटवर्कस्ट्रीम को लपेटना सुरक्षित है?

लेकिन यदि आप वास्तव में BufferedStream के साथ नेटवर्क स्ट्रीम को लपेटते हैं तो यह बहुत तेज़ है।

मेरा प्रश्न: NetworkStream.BeginRead आंतरिक रूप से Socket.BeginReceive पर आक्रमण करता है और एसिंक आईओ (विंडोज़ पर पूर्णता पोर्ट्स और इसी तरह) का पूरा ढेर। क्या ऐसा ही होता है जब BufferedStream बीच में होता है?

+0

क्या परावर्तक से कुछ भी दिखाई देने योग्य/समझ में आता है? – remio

+0

यह एसिंक कॉल (बुफर्डस्ट्रीम) को लागू नहीं करता है, इसलिए मुझे यकीन नहीं है कि यह किसी भी तरह से नेटवर्कस्ट्रीम या बेस स्ट्रीम पर जायेगा, जो एसिंक कर सकता है, लेकिन आईओसीपी – pablo

उत्तर

2

BufferedStream कुशल async IO का समर्थन नहीं करता है। यह स्ट्रीम क्लास से प्राप्त डिफ़ॉल्ट कार्यान्वयन का उपयोग करता है। यह थ्रेड-पूल पर तुल्यकालिक आईओ जारी करेगा। तो आपको ऐसा करने के लिए आईओ पूरा करने वाले बंदरगाह नहीं मिलेगा। आपको यह काम स्वयं करने की ज़रूरत है। यदि आप सी # 5 का उपयोग कर रहे हैं तो आप लगभग बुफर्डस्ट्रीम के कार्यान्वयन का पुन: उपयोग कर सकते हैं और एसिंक को थप्पड़ मारने का प्रयास कर सकते हैं और उस पर इंतजार कर सकते हैं।

+0

का उपयोग नहीं कर रहा है इस पर आधारित क्या है? BufferedStream स्रोतों को देखते हुए ऐसा लगता है कि अंतर्निहित धारा पर एसिंक ऑपरेशन को कॉल करके एसिंक ऑपरेशंस को सही तरीके से कार्यान्वित किया जाता है? –

+0

यह .NET 4.0 पर आधारित है। 4.5 पर यह अब सच नहीं है। अच्छी बात। – usr

+0

आह, स्पष्टीकरण के लिए धन्यवाद। –