2012-08-15 19 views
30

किसी उपयोग कथन में मेमोरी स्ट्रीम का उपयोग करते समय मुझे नज़दीक कॉल करने की आवश्यकता है? उदाहरण के लिए ms.Close() यहां जरूरी है?स्टेटमेंट का उपयोग करने में मेमोरीस्ट्रीम - क्या मुझे बंद करने की आवश्यकता है()

using (MemoryStream ms = new MemoryStream(byteArray)) 
    { 
     // stuff 

     ms.Close(); 
    } 
+0

http://stackoverflow.com/a/234257/490018 –

+0

संभव डब: http://stackoverflow.com/questions/911408/does-stream-dispose-always-call-stream-close-and- स्ट्रीम-फ्लश – sloth

उत्तर

52

नहीं, यह नहीं है: यह .Dispose() विधि है जो स्वचालित रूप से कहा जाता है के द्वारा बुलाया जाएगा।

using सुनिश्चित करता है कि Dispose() कहा जाएगा, जो बदले में Close() विधि को कॉल करता है।

आप मान सकते हैं कि सभी प्रकार के स्ट्रीम using कथन द्वारा बंद हो रहे हैं।

MSDN से:

आप एक वस्तु है कि इस तरह के एक StreamWriter के रूप में अप्रबंधित संसाधन, पहुँचता उपयोग करते हैं, एक अच्छा अभ्यास एक बयान का उपयोग कर के साथ उदाहरण बनाने के लिए है। उपयोग कथन स्वचालित रूप से स्ट्रीम को बंद कर देता है और कॉल ऑब्जेक्ट पर निपटान करता है जब उस कोड का उपयोग कर रहा है पूरा हो गया है।

+3

मुझे एहसास है कि यह पुराना है, लेकिन मैं यह जोड़ना चाहूंगा कि 'उपयोग' के अलावा 'क्लोज़() 'का उपयोग करके कोड विश्लेषण चेतावनी भी होगी" CA2202: ऑब्जेक्ट्स को कई बार निपटान न करें "। अधिक जानकारी के लिए, यहां "कारण" अनुभाग पढ़ें: http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k(CA2202);k(TargetFrameworkMoniker-.NETFramework ,Version% 3Dv4.0) –

+0

क्या यह दूसरी तरफ नहीं है। वह '.Close() 'कॉल करेगा। डिसस्पेक्ट()'? https://msdn.microsoft.com/en-us/library/system.io.stream.close(v=vs.110).aspx –

+0

निपटान() कॉल बंद करें() जो निपटान (बूलियन) कहता है। – sloth

6

एक बयान का उपयोग करने में एक स्मृति धारा का उपयोग करते समय मैं पास कॉल करने के लिए की जरूरत है?

नहीं, आपको इसकी आवश्यकता नहीं है।

using (MemoryStream ms = new MemoryStream(byteArray)) 
{ 
    // stuff 
} 
+3

@ हेनकहोल्टरमैन वास्तव में 'निपटान()' कॉल 'बंद करें()' जो बदले में 'निपटान (सत्य)' कहता है। – sloth

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

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