नहीं। असल में, आप वास्तव में इसे कचरा इकट्ठा नहीं करना चाहते हैं - कचरा कलेक्टर को संकेत देना अक्सर प्रदर्शन को कम करेगा।
void MyFunction()
{
using (Bitmap image = RetrieveImage())
{
DoSomething(image);
}
}
कि image.Dispose()
फोन करेगा यह पत्ते के रूप में using
कथन, चाहे DoSomething
एक अपवाद फेंक दिया हो।
आप हालांकि अतिरिक्त चर का उपयोग करना है - जब तक आप DoSomething
बदलने के बजाय एक Func<Bitmap>
लेने के लिए है, तो बजाय:
void DoSomething(Bitmap image)
{
// Code here
}
...
DoSomething(RetrieveImage());
आप होगा:
void DoSomething(Func<Bitmap> imageProvider)
{
using (Bitmap image = imageProvider())
{
// Code here
}
}
...
DoSomething(() => RetrieveImage());
ध्यान दें कि कि बिना के बिना बिटमैप में पास करने का अवसर नहीं देता है - यदि आप इसे बाद में उपयोग करना चाहते हैं तो समस्या हो सकती है। फिर भी, कम से कम इसके बारे में जानने के लिए यह एक अच्छी तकनीक है।
संपादित करें: जैसा कि मबेकिश ने अपनी टिप्पणियों में बताया है, RetrieveImage
के भीतर बिटमैप का निपटान करने पर यहां बहुत अधिक लाभ नहीं है। यहाँ हालांकि तर्ज पर एक प्रकार है:
public void ApplyToEachLineInFile(string file, Action<string> action)
{
using (TextReader reader = File.OpenText(file))
{
string line;
while ((line = reader.ReadLine()) != null)
{
action(line);
}
}
}
यहाँ "अधिग्रहण और निपटान के" तर्क समझाया गया है, फोन करने वाले को इसके बारे में चिंता किए बिना - लेकिन फोन करने वाले अभी भी तर्क की जटिलता वे पारित करने के मामले में बहुत लचीला हो सकता है में
मैं 1 und 2. के बीच कोई अंतर नहीं दिख रहा है यह क्यों व्यवहार करना चाहिए विभिन्न कचरा संग्रहण के लिहाज से (इस ऑब्जेक्ट दायरे से बाहर गिर IDisposable को लागू कि कोई भी यह सोचते हैं जाता है)? – flq
मैं वास्तव में "आप यह क्या चाहते हैं" प्रकार की टिप्पणियों का वकील नहीं हूं, लेकिन गंभीरता से, .NET कचरा कलेक्टर वास्तव में प्रोग्रामर से बेहतर जानता है जब यह कुछ सफाई करने का एक अच्छा समय है। ध्यान रखें कि .NET VM एक वास्तविक समय प्रणाली नहीं है। अगर आपके पास अप्रबंधित संसाधन हैं, तो IDISposable और उपयोग का उपयोग करें। –
आपको मानक कचरा कलेक्टर पर भरोसा करना चाहिए - यदि आप कचरा संग्रहण को मजबूर करना चाहते हैं तो आप प्रदर्शन खो देंगे। क्या ऐसा कोई विशेष कारण है जब आप ऐसा करते हैं जब आप ऐसा करते हैं? – jball