finalizers वास्तव में कभी नहीं मार डाला, Raymond Chen explains के रूप में हो सकता है। तरह हास्यास्पद है कि इस सवाल का अपने वार्षिक CLR सप्ताह के दौरान कहा जाता है, बस दो दिन के बाद वह इसे :)
आलसी लोगों के लिए बताया गया है, (या बल्कि, एक) निष्कर्ष है:
एक सही ढंग से लिखित कार्यक्रम यह नहीं मान सकता कि फाइनलर कभी भी दौड़ेंगे।
यदि आप सोच रहे हैं कि आप अंतिम रूपकों पर भरोसा कर सकते हैं, तो यह पहले से ही आपको पता होना चाहिए: अंतिमकरण पर भरोसा न करें।
रेमंड चेन भी जुड़ा हुआ लेख में कहा गया है के रूप में:
finalizers एक सुरक्षा तंत्र, नहीं संसाधन सुधार के लिए एक प्राथमिक साधन हैं।
यदि आप संसाधनों को कैसे रिलीज़ करना चाहते हैं, तो डिस्पोजेबल पैटर्न पर एक नज़र डालें।
एक finalizer नहीं चला सकते हैं, उदाहरण के लिए, यदि:
- एक और finalizer एक अपवाद फेंकता है।
- एक और फाइनलाइज़र 2 सेकंड से अधिक समय लेता है।
- सभी फाइनलरों को एक साथ 40 सेकंड से अधिक समय लगता है।
- एक AppDomain दुर्घटनाओं या उतार दिया जाता है (हालांकि आप एक महत्वपूर्ण finalizer (CriticalFinalizerObject, SafeHandle या कुछ है कि तरह) के साथ इस को नाकाम कर सकते हैं
- कोई कचरा संग्रहण होता है
- प्रक्रिया दुर्घटनाओं
(नोट: समय मूल्य but were certainly true some time ago के साथ बदल सकते हैं।)
मुझे लगता है कि कई और चीजें हैं जो अंतिम रूप से कभी नहीं चल सकती हैं। नीचे की रेखा श्री चेन के उद्धरण के अलावा है, कि अंतिमकर्ता एक हैं सुरक्षा नेट वें पर की बग के प्रभाव को कम करें, उदाहरण के लिए संसाधन कभी-कभी जारी किए जाते हैं, जो से बेहतर है, यदि आप इसे स्पष्टता करना भूल जाते हैं।
क्या आप और उद्धृत कर सकते हैं महत्वपूर्ण भागों में से? और हाँ, शायद पूछताछकर्ता वास्तव में उस लिंक की प्रतीक्षा कर रहा था। ;) – mafu
दरअसल, चूंकि बहुत से लोग पूछते हैं कि वे अंतिम रूप व्यवहार पर भरोसा कैसे कर सकते हैं, मुझे लगता है कि मैंने * सबसे महत्वपूर्ण भाग उद्धृत किया है;) दूसरी तरफ, लेख में अन्य बॉक्स भी दिलचस्प हो सकते हैं। – OregonGhost
@ ओरेगॉनहोस्ट: क्या मैं इस अधिकार को समझ रहा हूं: यदि 20 फाइनलर प्रत्येक प्रत्येक को 1.95 सेकेंड लेते हैं, तो यह डरावना डोरी है और सभी निष्पादित होंगे - 39 सेकंड लेते हैं। अगर कोई 2.05 सेकेंड लेता है, तो बाकी सभी का निष्पादन छोड़ दिया जाता है। ऐसा लगता है कि टूटा हुआ है। इसके बजाय दूसरे फाइनल में 40 सेकंड के टाइमआउट के लिए दौड़ने की अनुमति देने के उद्देश्य से 2 सेकंड से अधिक समय तक चलने वाले फाइनल में कठोर रूप से बाधा डालना एक अच्छी सुविधा होगी। लेकिन दो सेकंड के बाद चीजों को पकड़ना एक गलतफहमी प्रतीत होता है। – supercat