मैं सी # में "सही" नेटवर्क कोड लिखने के तरीके के बारे में बहुत सारे शोध कर रहा हूं।सी # नेटवर्क प्रोग्रामिंग और संसाधन उपयोग
मैंने सी # के "उपयोग" कथन का उपयोग करके कई उदाहरण देखे हैं, और मुझे लगता है कि यह एक अच्छा दृष्टिकोण है, हालांकि मैंने विभिन्न अभिव्यक्तियों के साथ इसका असंगत उपयोग देखा है।
उदाहरण के लिए, मान लीजिए कि मैं कुछ कोड इस तरह है:
TcpClient tcpClient = new TcpClient("url.com", 80);
NetworkStream tcpStream = tcpClient.GetStream();
StreamReader tcpReader = new StreamReader(tcpStream);
StreamWriter tcpWriter = new StreamWriter(tcpStream);
जाहिर है, इस कोड को बहुत परतदार होने जा रहा है। इसलिए, मैंने कुछ कोड देखा है जो tcpClient पर उपयोग करता है, जो अच्छा लगता है। हालांकि, क्या नेटवर्कस्ट्रीम में संसाधन भी नहीं हैं जिन्हें सफाई की आवश्यकता है? StreamReader/लेखक के बारे में क्या?
क्या मुझे बयानों का उपयोग करके घोंसला में सभी 4 कथन लपेटने की ज़रूरत है?
और यदि ऐसा है, तो समय कब निपटने के लिए क्या होता है? StreamWriter स्ट्रीम बंद नहीं करेगा और परिणामस्वरूप सॉकेट? फिर क्या होता है जब StreamReader, तो NetworkStream, तो TcpClient प्रत्येक अपने निपटान के माध्यम से जाता है?
जो एक और प्रश्न लाता है। स्ट्रीम स्ट्रीमर और स्ट्रीमवाइटर दोनों एक ही स्ट्रीम से बना है, जो इसका मालिक है? क्या वे दोनों सोचते हैं कि वे इसका स्वामी हैं, और इस प्रकार दोनों इसे नष्ट करने की कोशिश करेंगे? या क्या ढांचे को पता है कि धारा पहले ही नष्ट हो चुकी है और चुपचाप इसे अनदेखा कर रही है?
ऐसा लगता है कि श्रृंखला में अंतिम विवरण के लिए केवल उपयोग कथन ही आवश्यक है, लेकिन फिर क्या होता है यदि GetStream() में कोई अपवाद डाला जाता है? मुझे नहीं लगता कि यह सॉकेट को ठीक तरह से साफ कर देगा, इसलिए ऐसा लगता है कि ऐसा नहीं होने के लिए अनावश्यक उपयोग आवश्यक हैं।
क्या किसी को नेटवर्क प्रोग्रामिंग पर .NET के साथ किसी भी अच्छी, हाल की किताबों के बारे में पता है, और prefeably C# जिसमें अपवाद हैंडलिंग और संसाधन प्रबंधन पर अध्याय शामिल हैं? या शायद कोई अच्छा लेख ऑनलाइन? मैं जो पुस्तकें पा सकता हूं वह .NET 1.1 युग (माइक्रोसॉफ्ट .NET Framework के लिए नेटवर्क प्रोग्रामिंग, नेटवर्क प्रोग्रामिंग इन .NET, आदि ..) से हैं, इसलिए ऐसा लगता है कि कुछ अच्छे संसाधनों की आवश्यकता है।
संपादित करें:
कृपया, न दें मार्क का बहुत अच्छा टिप्पणी इस :) पर टिप्पणी करने से किसी और को रोकने के
मैं किसी को भी elses पुस्तक सिफारिशों या संसाधन प्रबंधन पर राय सुनने के लिए, विशेष रूप से करना चाहते हैं असीमित उपयोग के संबंध में।
प्रतिक्रिया के लिए धन्यवाद। यह काफी हद तक मुझे संदेह है। मैं सहमत हूं, नेटवर्कस्ट्रीम एक विषमता है। मुझे यकीन नहीं है कि अलग-अलग पढ़ने और लिखने वाली धाराएं बनाने के लिए यह कोई समस्याग्रस्त नहीं होता है, लेकिन यह वही है। पुस्तक के पुनर्मूल्यांकन के लिए धन्यवाद। –
इसके अलावा, मैंने आपके द्वारा उल्लिखित साइट पर एक NonClosingStream कार्यान्वयन नहीं देखा था। –
यह वहां है - MiscUtil.IO.NonClosingStreamWrapper –