2009-01-31 15 views
7

को लागू करने ASP.NET में अगर आइटम सत्र स्थिति में छोड़ दिया जाता है कि आइटम IDisposable को लागू करें, लेकिन विशेष रूप से हटा दिया गया और अनुप्रयोग द्वारा निपटारा कभी नहीं कर रहे हैं की समय सीमा समाप्त जब सत्र वस्तुओं पर कहा जा निपटान करेगा कि Dipose में किसी भी कोड () निष्पादित करेगा?सत्र युक्त IDisposable

+0

इस प्रश्न का अधिक जवाब: http://stackoverflow.com/q/12347044/11683 – GSerg

उत्तर

2

यदि IDisposable पैटर्न implemented properly है, तो हाँ (यानी कक्षा का विनाशक वस्तु का निपटान करने का ख्याल रखेगा)। मुझे विश्वास नहीं है कि एएसपी.नेट सत्र प्रबंधक IDisposable लागू करने वाले वर्गों पर Dispose() को स्पष्ट रूप से कॉल करने के बारे में कोई गारंटी देता है।

ध्यान दें कि मार्क की आक्रामक आपत्तियों के बावजूद, मैं सुझाव दे नहीं कर रहा हूँ "नियमित रूप से" जोड़कर finalizers। मैं बस सुझाव दे रहा हूं कि यदि आप Dispose विधि को समाप्त करते हैं, तो सत्र की अवधि समाप्त होने पर आपके ऑब्जेक्ट पर विधि, यह एक व्यवहार्य विकल्प है।

+2

एक अंतिमकर्ता * सही आईडीस्पोज़ेबल कार्यान्वयन नहीं है; बल्कि, फाइनेंजर के साथ कुछ भी अक्सर IDisposable हो सकता है। लेकिन एक आईडीस्पोजेबल ऑब्जेक्ट में फाइनलाइज़र नहीं होना चाहिए क्योंकि यह आईडीस्पोज़ेबल है। –

+0

मुझे नहीं लगता था कि यह "आक्रामक" था - बस एक फाइनलाइज़र के पास कुछ भी नहीं है कि आईडीस्पोजेबल "ठीक से कार्यान्वित किया गया है" –

+0

मैं कहूंगा कि मेरे उत्तर पर नकारात्मक टिप्पणी छोड़कर, मेरे उत्तर को गलत तरीके से प्रस्तुत करना और अपना उत्तर बनाना जो आपकी असहमति को दोहराता है 'आक्रामक आपत्ति' के रूप में योग्यता प्राप्त करता है। उनमें से कोई भी अपने आप में और पर्याप्त होगा। मुझे लगता है कि हमें इस पर भी असहमत होना होगा। –

10

मैं शॉन के जवाब से असहमत चाहते हैं; सबसे पहले, finalizers नहीं नियमित कक्षाओं में जोड़ा जाना चाहिए, भले ही वे IDisposable कर रहे हैं - finalizers केवल वास्तव में कक्षाएं कि अप्रबंधित संसाधनों का प्रतिनिधित्व में इस्तेमाल किया जाना चाहिए। इसके विपरीत, फाइनलजर वाला एक वर्ग अक्सर IDisposable भी होता है।

पुन प्रश्न: Dispose() कहा जाता है - नहीं, यह नहीं है। ऑब्जेक्ट भविष्य में किसी बिंदु पर एकत्रित कचरा होगा (अनिश्चित), लेकिन यह इसके बारे में है। एक फाइनलाइज़र यहां बहुत कुछ नहीं जोड़ता है, क्योंकि किसी भी encapsulated ऑब्जेक्ट्स संग्रह के लिए पहले ही पात्र होंगे (मानते हैं कि उन्हें कहीं और संदर्भित नहीं किया गया है)।

1

मैं सत्र में डिस्पोजेबल वस्तुओं के लिए चिंतित होगा। यह लगभग निश्चित रूप से आपके लिए एक स्केलेबिलिटी मुद्दा बना देगा। डिस्पोजेबल जो कुछ भी संभवतः कुछ सीमित संसाधन से जुड़ा हुआ है, यदि आपके पास बहुत से सक्रिय सत्र हैं जो आप उस संसाधन का उपयोग करने की संभावना रखते हैं। दूसरी बात यह है कि मैं उम्मीद करता हूं कि कई (अधिकांश?) डिस्पोजेबल ऑब्जेक्ट्स वेब फार्म में अच्छी तरह से काम नहीं करेंगे क्योंकि वे जिस संसाधन से बंधे हैं वे शायद एक मशीन के लिए स्थानीय हैं और वे क्रमबद्ध नहीं करेंगे और फिर उसी मशीन पर deserialize नहीं करेंगे राज्य।

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