हम ओरेकल डीबी (माइक्रोसॉफ्ट ऑरैकल क्लाइंट) तक पहुंचने के लिए एंटरप्राइज़ लाइब्रेरी 3.0 का उपयोग करते हैं। क्या होता है जब मैं संग्रहीत प्रक्रिया या फ़ंक्शन के बाद किसी DbCommand इंस्टेंस का निपटान नहीं करता है? क्या .NET स्वचालित रूप से कचरा इकट्ठा करता है? ध्यान दें कि हम यह सुनिश्चित करते हैं कि लेनदेन/कनेक्शन बंद हो जाए और ठीक से निपटान हो।उपयोग के बाद डीबीकॉमैंड का निपटान करना आवश्यक है?
उत्तर
यह डुप्लिकेट है, लेकिन मैं मूल खोजने के लिए समय नहीं है।
यदि यह IDISposable लागू करता है, और यदि आपने इसे बनाया है, तो आपको उस पर निपटान करने की आवश्यकता है। यही कारण है कि कक्षा के डेवलपर ने इसे IDISposable लागू किया।
कचरा कलेक्टर कॉल नहीं करता है सभी IDisposable- कार्यान्वयन वस्तुओं पर निपटान।
ओरेकल के बारे में 100% निश्चित नहीं है, लेकिन एसक्यूएल कॉमांड का उपयोग करते समय, इसे उपयोग के बाद निपटान किया जाना चाहिए। आप या तो केवल .Dispose (कह सकते हैं), या सिर्फ एक का उपयोग कर ब्लॉक में डाल दिया है, तो जैसे:
using(DbCommand cmd = new DbCommand(foo, bar))
{
// use cmd object
}
परावर्तक यह इंगित नहीं करता है कि OracleCommand
विशेष रूप से निपटान (System.ComponentModel.Component
के कार्यान्वयन से) को ओवरराइड करता है, तो संभावना है कि यदि आप इसे कॉल नहीं करते हैं तो यह आपके आवेदन को अधिक नुकसान नहीं पहुंचाएगा।
महत्वपूर्ण बात यह है कि OracleCommand
विशेष रूप से IDbCommand
लागू करता है, जो विशेष रूप से IDisposable
लागू करता है। यदि आपने कभी भी OracleCommand
को IDbCommand
के साथ बदल दिया है, तो आप शायद Dispose()
का उपयोग करना चाहेंगे। और SqlCommand
स्पष्ट रूप से Dispose()
ओवरराइड नहीं करता है, ओडीबीसी और ओलेडीबी निश्चित रूप से करते हैं।
संक्षेप में, क्योंकि यह IDisposable
है, इसलिए आपको सुरक्षित पक्ष पर रहने के लिए इसे निपटाना चाहिए।
धन्यवाद। – Vivek
प्रलेखन से IDisposable
के लिए:
इस इंटरफेस का प्राथमिक उपयोग अप्रबंधित संसाधन जारी करने के लिए है। कचरा कलेक्टर स्वचालित रूप से किसी प्रबंधित ऑब्जेक्ट को आवंटित स्मृति को रिलीज़ करता है जब उस ऑब्जेक्ट का अब उपयोग नहीं किया जाता है। हालांकि, यह अनुमान लगाना संभव नहीं है कि कब कचरा संग्रह होगा। इसके अलावा, कचरा कलेक्टर को अप्रबंधित संसाधनों जैसे खिड़की हैंडल, या खुली फाइलें और धाराओं का कोई ज्ञान नहीं है।
कचरा कलेक्टर के संयोजन के साथ अप्रबंधित संसाधनों को स्पष्ट रूप से रिलीज़ करने के लिए इस इंटरफ़ेस की निपटान विधि का उपयोग करें। किसी ऑब्जेक्ट का उपभोक्ता इस विधि को कॉल कर सकता है जब ऑब्जेक्ट की आवश्यकता नहीं होती है।
इस को देखते हुए, एक वस्तु को लागू करने वाली IDisposable
संभावित अप्रबंधित संसाधन के लिए संदर्भ रखता है। ये संसाधन तब तक जारी नहीं किए जाते जब तक कचरा कलेक्टर आ जाता है और ऑब्जेक्ट एकत्र नहीं करता है। हालांकि, चूंकि आप यह नहीं जान सकते कि कचरा कलेक्टर यह कब करेगा, डिस्पोजेबल ऑब्जेक्ट्स (जैसे OracleDbCommand
) आप जितना चाहें उतना लंबा लटका सकते हैं।
एक वस्तु को लागू करता है तो IDisposable
, आप यह जितनी जल्दी हो सके अप्रबंधित संसाधन है कि यह करने के लिए संदर्भ रखती जारी करने के लिए फोन करना चाहिए। इसे या तो सीधे Dispose
पर कॉल करके या इसे उपयोग करने वाले ब्लॉक में घोषित करके पूरा किया जा सकता है।
मैंने यह कहने के लिए पढ़ा कि "इसके अलावा, कचरा कलेक्टर को अप्रबंधित संसाधनों जैसे खिड़की हैंडल, या खुली फाइलें और धाराओं का कोई ज्ञान नहीं है"। इसलिए, जीसी इन संसाधनों को कभी भी जारी नहीं करेगा। –
यही कारण है कि एक वर्ग IDISposable लागू करता है। जीसी उन्हें रिहा नहीं कर सकता क्योंकि यह उनके बारे में नहीं जानता है।जिस श्रेणी में अप्रबंधित संसाधन हैं, उन्हें अवश्य ही मुक्त करना होगा जब निपटान विधि लागू की जाती है। –
लेकिन आपने कहा "इन संसाधनों को तब तक जारी नहीं किया जाता है जब तक कचरा कलेक्टर आते हैं और ऑब्जेक्ट एकत्र नहीं करते हैं"। इन अप्रबंधित संसाधनों की रिहाई सामान्य रूप से कचरा कलेक्टर पर निर्भर नहीं होती है। –
- 1. कब निपटान आवश्यक है?
- 2. प्रक्रिया के बाद Process.WaitForExit का उपयोग करना आवश्यक है? किल?
- 3. कार्य (Factory.StartNew() का उपयोग करने के बाद आवश्यक है()?
- 4. बेस क्लास के विनाशक/निपटान का उपयोग करना?
- 5. सबमिट बटन का उपयोग करना के बाद
- 6. क्यों डिस्पोजेड ऑब्जेक्ट का निपटान करने के बाद इसका उपयोग करने पर अपवाद नहीं फेंकता है?
- 7. पैकिंग के बाद data.fs.old रखना आवश्यक है?
- 8. VertexAttribPointer प्रत्येक BindBuffer के बाद आवश्यक है?
- 9. क्या InitCommonControlsEx() और InitCommonControls() का उपयोग करना आवश्यक है?
- 10. मीडियाविकि के बाद किस विकी का उपयोग करना है?
- 11. क्या मुझे म्यूटेक्स का निपटान करना चाहिए?
- 12. क्या मुझे प्रक्रिया का निपटान करना है। स्टार्ट (यूआरएल)?
- 13. वास्तव में फ़ॉन्ट का निपटान करना कितना महत्वपूर्ण है?
- 14. बटन ब्राउज़ करना आवश्यक है?
- 15. बंद() और निपटान() के साथ स्ट्रीमवाइटर का क्या मतलब है?
- 16. ब्रश का निपटान
- 17. SqlCommand आज (कथन का उपयोग/निपटान मुद्दा)
- 18. एक वर्ग लोडर का निपटान
- 19. क्या मुझे रिटर्न के बाद किसी फ़ंक्शन के भीतर निपटान() को कॉल करना चाहिए?
- 20. वर्तमान के बाद pushViewController का उपयोग करना ModalViewController
- 21. स्ट्रक्चरमैप डेटाकॉन्टेक्स्ट ऑब्जेक्ट का निपटान
- 22. डब्ल्यूपीएफ उपयोगकर्ता नियंत्रण का निपटान
- 23. अभी भी आवश्यक है ActionBarSherlock का उपयोग कर रहा है?
- 24. क्या डेटाबेस को बंद करना आवश्यक है?
- 25. सी # में कॉलिंग निपटान (IsDisposing) पैटर्न का निपटान का उद्देश्य?
- 26. कौन सा बेहतर है, और कब: सी # में एक आईडीस्पोजेबल पर कथन का उपयोग या निपटान() का उपयोग करना?
- 27. क्या हमेशा ब्लॉक के अंदर स्वयं को कमजोर संदर्भों का उपयोग करना आवश्यक है ..?
- 28. पावरहेल में निपटान नहीं करना कितना बुरा है?)
- 29. HttpURLConnection: कनेक्ट() को कॉल करना आवश्यक है?
- 30. DataContext पर निपटान() को कॉल करने के बाद DbLinq क्वेरी को गिनना क्यों संभव है?
क्या? नहीं, वह झूठा है। निपटान के लिए मानक पैटर्न उपयोगकर्ताओं को संसाधनों को जल्दी से मुक्त करने की अनुमति देना है, लेकिन अभी भी अंतिमकरण में साफ है यदि विधि अभी तक नहीं बुलाई गई है। – RandomEngy
इस आलेख को देखें: http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx निपटान() को अंतिमकर्ता में बुलाया जाता है, जो वास्तव में कचरा कलेक्टर को प्राप्त होने पर चलाएगा। – RandomEngy
IDISposable के सभी उपयोगकर्ता अंतिमकरण को लागू नहीं करते हैं। जो लोग अंतिम रूप देने वाले नहीं हैं वे मानक पैटर्न का पालन करेंगे। आप फाइनेंजर के अस्तित्व पर निर्भर नहीं हो सकते हैं, और आप कचरा कलेक्टर द्वारा बुलाए जाने पर निपटने पर निर्भर नहीं हो सकते हैं। –