2009-07-28 10 views
15

यह देखते हुए कि नियंत्रण वर्ग IDISposable लागू करता है, मुझे लगता है कि ASP.Net कम से कम एक निपटान कैस्केड को ट्रिगर करने में सक्षम है क्योंकि पृष्ठ ब्राउज़र के दरवाजे के रास्ते पर अपने जीवन चक्र को समाप्त करता है?क्या ASP.Net कॉल किसी पृष्ठ में पृष्ठ/नियंत्रण पर निपटान करता है, या मुझे यह करना चाहिए?

सरल प्रश्न: क्या यह मामला है, या मुझे यह करना चाहिए?

उत्तर

8

यह आपके लिए किया गया है। से पर UnloadRecursive() पर देखें, जिसे ProcessRequestCleanup() द्वारा बुलाया जाता है।

+0

थक्स डंकन, यह मैंने देखा है कि पहला वास्तविक सबूत है। –

5

नहीं, आपको नियंत्रण पर निपटान नहीं करना चाहिए, ऐसा किया जा रहा है। आप नियंत्रण संरचना (फ़ाइलस्ट्रीम इत्यादि) के बाहर बनाए गए अन्य डिस्पोजेबल ऑब्जेक्ट्स के लिए ज़िम्मेदार हैं।

यह एक सामान्य .NET सिद्धांत से मिलता है: पृष्ठ नियंत्रण का मालिक है और इसलिए उन्हें (स्पष्ट) निपटान करने की आवश्यकता है। वास्तविक कोड के लिए आपको Web.UI.Control के लिए कोड को प्रतिबिंबित करना होगा।

+0

मुझे शक नहीं है कि आप सही हैं। मैं किसी और को मनाने की कोशिश कर रहा हूं हालांकि किसी भी संदर्भ की सराहना करता हूं जिसे आप जानते हैं जो इसका समर्थन करेगा। –

+0

मुझे लगता है कि इस मामले में सबसे अच्छा सबूत आपके नियंत्रण को साफ करने के तरीके के बारे में लेखों की कमी है (-: लेकिन मैं थोड़ा संपादित करूंगा। –

+0

हेनक सही है। न तो आप और न ही "किसी और ने" माइक्रोसॉफ्ट से कोई लेख देखा है एएसपी.नेट पर जिसमें "डिस्प्ले लूप" है। ऐसा इसलिए है क्योंकि इसकी आवश्यकता नहीं है। –

2

The ASP.NET Page Life Cycle पर यह लेख कहा गया है कि:

"अनलोड पेज के बाद पूरी तरह से गाया कर दिया गया है कहा जाता है, ग्राहक को भेजा, और त्याग के लिए तैयार है इस बिंदु पर, इस तरह के रिस्पांस और अनुरोध के रूप में पेज गुण। अनलोड किए गए हैं और कोई क्लीनअप किया जाता है। "

मैं यह कहूंगा कि "किसी भी सफाई" का मतलब नियंत्रणों का निपटान आदि है। मैं कल्पना नहीं कर सकता कि एएसपी.नेट ढांचे के डिजाइनरों ने अनदेखा किया होगा और कोई भी ध्यान नहीं देगा।

1

अलग-अलग व्याख्या की गई, आंखों की तुलना में इस प्रश्न की अधिक जटिलता है।

निश्चित Disposed कॉल किया जाता है, लेकिन क्या यह कुछ भी करता है? निर्भर करता है।

यदि आपने किसी पृष्ठ या नियंत्रण की Disposed ईवेंट की सदस्यता ली है और इसे प्रति-अनुरोध कहा जा रहा है, तो आप आश्चर्यचकित हो सकते हैं। हाँ, तकनीकी तौर पर ProcessRequestCleanup() यह तुम्हारे लिए कहता है, लेकिन यह वास्तव में क्या कहता है पर एक नजर है:

public virtual void Dispose() 
{ 
    IContainer service = null; 
    if (this.Site != null) 
    { 
     service = (IContainer) this.Site.GetService(typeof(IContainer)); 
     if (service != null) 
     { 
      service.Remove(this); 
      EventHandler handler = this.Events[EventDisposed] as EventHandler; 
      if (handler != null) 
      { 
       handler(this, EventArgs.Empty); 
      } 
     } 
    } 
    if (this._occasionalFields != null) 
    { 
     this._occasionalFields.Dispose(); 
    } 
} 

एक डिजाइन सतह के बिना, इस कोड को अनिवार्य रूप से कुछ भी नहीं रन-टाइम में जिसका अर्थ है अपने Disposed संचालकों पर अमल कभी नहीं होगा करता है,।

पाठ प्रति अनुरोध निष्पादित करने के लिए Disposed हैंडलर पर भरोसा नहीं करता है। आप कुछ निष्पादन की गारंटी के लिए इसे ओवरराइड कर सकते हैं, लेकिन Unloaded एक अधिक सुरक्षित शर्त है।

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

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