मेरे पास एक महत्वपूर्ण संसाधन के साथ एक सी # ऑब्जेक्ट है जिसे समय-समय पर बहुत विशिष्ट बिंदुओं को फ़्लश करने की आवश्यकता होती है ताकि कचरा कलेक्टर के लिए चारों ओर जाने के लिए खराब उम्मीदवार बन जाए, जब भी यह इसके आसपास हो, मुझे इसे कैसे संभालना चाहिए? क्या सी ++ के डिलीट ऑपरेटर की तरह कुछ है जो मुझे आवश्यक होने पर इस ऑब्जेक्ट के उदाहरण को मैन्युअल रूप से मारने देगा?आप सी # में निर्धारिक अंतिमकरण कैसे प्रबंधित करते हैं?
उत्तर
यह ठीक है IDiposable
इंटरफ़ेस के लिए है। आप Dispose()
विधि में महत्वपूर्ण संसाधनों को जारी करते हैं, और फिर ऑब्जेक्ट को मिटाने के साथ निपटने के लिए ऑब्जेक्ट को कचरा डिस्पोजेर के लिए छोड़ दें।
Google IDISposable इंटरफ़ेस के लिए Google। यह आपके लिए उपलब्ध एकमात्र तंत्र है। यदि आपका महत्वपूर्ण संसाधन अप्रबंधित है तो यह दर्जी बना है। यदि यह एक प्रबंधित संसाधन है, तो क्या आप "फ्लश" होने की आवश्यकता के बारे में अधिक विशिष्ट हो सकते हैं।
आईडीस्पोजेबल इंटरफेस को सी ++/सीएलआई में निर्धारित विनाश का समर्थन करने के लिए जोड़ा गया था, और आप इसे किसी भी .NET भाषा से उपयोग कर सकते हैं। यह वही है जो आप चाहते हैं।
यदि आप एक विशिष्ट प्रबंधित संसाधन के बारे में बात कर रहे हैं जिसे आपको "विशिष्ट" समय पर जारी किया जाना चाहिए, तो आप ऑब्जेक्ट को संदर्भित करने के बाद कचरा कलेक्टरों कलेक्ट विधि को निर्दिष्ट रूप से कॉल कर सकते हैं, लेकिन प्रदर्शन विचार हैं इस बारे में सोचा जाए, आमतौर पर कचरा कलेक्टर जानता है कि वस्तुओं को कब इकट्ठा करना है। और सामान्य रूप से यह एक बुरा विचार है।
जैसा कि अन्य ऊपर उल्लेखित कर रहे हैं, IDISposable पैटर्न आवश्यक होने पर अप्रबंधित संसाधनों को जारी करने के लिए सहायक है।
नोट: मैं दोहराने जा रहा हूं, आप जीसी कॉल कर सकते हैं। (लेकिन यह अच्छी बात नहीं है, लेकिन सवाल के लिए एक वैध जवाब है!
IDISposable इंटरफ़ेस निर्धारित विनाश के लिए मौजूद है। MSDN पर इसे सही ढंग से कार्यान्वित करने के लिए एक पैटर्न है।
टंडेम में, आपको using statement का उपयोग करने पर भी विचार करना चाहिए जब आपके ऑब्जेक्ट का जीवनकाल एकाधिक स्कॉप्स नहीं फैलता है।
आप IDisposable
के लिए देख रहे हैं। यहां एक उदाहरण वर्ग है जो इसे लागू करता है।
class MyDisposableObject : IDisposable
{
public MyDisposableObject()
{
}
~MyDisposableObject()
{
Dispose(false);
}
private bool disposed;
private void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
// Dispose of your managed resources here.
}
// Dispose of your unmanaged resources here.
this.disposed = true;
}
}
void IDisposable.Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
इसका इस्तेमाल करने के लिए आपको कुछ इस तरह कर सकते हैं:
public void DoingMyThing()
{
using (MyDisposableObject obj = new MyDisposableObject())
{
// Use obj here.
}
}
using
कीवर्ड यह सुनिश्चित करें कि IDisposable
पर Dispose()
विधि इसके दायरे के अंत में कहा जाता हो जाता है बनाता है।
- 1. आप सी ++ से प्रबंधित (सी #) फ़ंक्शन कैसे कॉल करते हैं?
- 2. आप उत्पादन डेटाबेस में स्कीमा अपग्रेड कैसे प्रबंधित करते हैं?
- 3. आप php में डेटाबेस कनेक्शन कैसे प्रबंधित करते हैं?
- 4. आप अपने आईफोन ऐप्स में क्रैश कैसे प्रबंधित करते हैं?
- 5. आप अपने एसक्यूएल उदाहरणों को कैसे याद/प्रबंधित करते हैं?
- 6. आप अपने एक्सटेंशन विधियों के नामस्थान कैसे प्रबंधित करते हैं?
- 7. आप विंडोज सर्वर पर डेवलपर पहुंच कैसे प्रबंधित करते हैं?
- 8. आप setTimeout() के कई उदाहरणों को कैसे प्रबंधित करते हैं?
- 9. आप डिज़ाइन-टाइम पर एकाधिक टीपीनल कैसे प्रबंधित करते हैं?
- 10. आप एक्सकोड में टीडीडी कैसे करते हैं?
- 11. रूबी में आप पॉलिमॉर्फिज्म कैसे करते हैं?
- 12. प्रबंधित कोड में आप Windows सुरक्षा वर्णनकर्ता कैसे बनाते हैं?
- 13. आप फाइलों में सी # कोड कैसे व्यवस्थित करते हैं?
- 14. आप सी ++ हेडर में सरणी कैसे घोषित करते हैं?
- 15. सी # परियोजनाओं में आप app.config को कैसे एम्बेड करते हैं?
- 16. सी ++ में आप बिटवाई झंडे का उपयोग कैसे करते हैं?
- 17. आप सी # में यादृच्छिक संख्या कैसे उत्पन्न करते हैं?
- 18. क्या आप विम में सी ++ कोड डीबग करते हैं? कैसे?
- 19. आप फ़ाइल आकार को सी # में कैसे प्राप्त करते हैं?
- 20. आप सी में फ़ाइल का आकार कैसे निर्धारित करते हैं?
- 21. सी ++ में क्लिपबोर्ड से आप कॉपी/पेस्ट कैसे करते हैं?
- 22. आप सी में संसाधन फ़ाइलों को कैसे एम्बेड करते हैं?
- 23. हास्केल में ऑब्जेक्ट ग्राफ़ कैसे प्रबंधित करते हैं?
- 24. आप पाइथन मॉड्यूल कैसे व्यवस्थित करते हैं?
- 25. लिंक से एक्सएमएल पर पूछताछ करते समय आप मनमाने ढंग से नेमस्पेस कैसे प्रबंधित करते हैं?
- 26. डेटाबेस को मॉडलिंग करते समय आप "विशेष-केस" डेटा को कैसे प्रबंधित करते हैं?
- 27. आप प्रोटोटाइप कैसे करते हैं?
- 28. आप postgresql में mysqldump कैसे करते हैं?
- 29. आप कैसे प्रतिक्रिया करते हैं?
- 30. आप अपनी परियोजनाओं का संस्करण कैसे बनाते हैं और रिलीज प्रबंधित करते हैं?
जीसी.कोलेक्ट() को कॉल न करें। अंदर आने के लिए बुरी आदत, और आमतौर पर उपयोगी से अधिक हानिकारक है। – Will
मुझे पता है कि ... इस प्रकार इसका उपयोग न करने के बारे में मेरा नोट। –