2012-07-02 10 views
7

मेरे पास एक एएसपी.नेट वेब पेज है जो कई डेटाबेस से जुड़ता है और कई फाइलों का उपयोग करता है। मैं स्पष्ट नहीं हूं कि क्या होता है यदि अंतिम उपयोगकर्ता लोड होने से पहले वेब पेज को बंद कर देता है यानी एएसपी.नेट जीवन चक्र समाप्त होता है या क्या सर्वर अभी भी पृष्ठ उत्पन्न करने और क्लाइंट को वापस करने का प्रयास करेगा? मेरे पास जीवन चक्र का उचित ज्ञान है लेकिन मुझे इस पर कोई दस्तावेज नहीं मिल रहा है।क्या एएसपीनेट लाइफसाइकिल जारी है यदि मैं प्रसंस्करण के बीच में ब्राउज़र बंद करता हूं?

मैं एक संभावित स्मृति रिसाव का पता लगाने की कोशिश कर रहा हूं। मैं यह स्थापित करने की कोशिश कर रहा हूं कि सभी कोड चलेंगे या नहीं, कनेक्शन कनेक्शन का निपटारा किया जाएगा या नहीं।

उत्तर

6

कोड अभी भी चलाएगा। पर HttpRequest ऑब्जेक्ट पर एक संपत्ति है जो इंगित कर सकती है कि क्लाइंट अभी भी कनेक्ट है या नहीं, यदि आप लूप में स्ट्रीमिंग आउटपुट जैसे ऑपरेशन कर रहे हैं।

+1

यह एक अच्छा बिंदु +1 है। मैं पेज पर प्रतिक्रिया कई बार उपयोग कर रहा हूँ। फ्लश। सर्वर फ्लश में क्या होता है लेकिन कोई क्लाइंट नहीं है? – w0051977

3

एक बार पृष्ठ पर अनुरोध उत्पन्न होने के बाद, यह जीवन चक्र पर अनलोड के माध्यम से जाएगा। यह पता नहीं है कि क्लाइंट तब तक नहीं है जब तक वह अनलोड पर जानकारी भेजता न हो।

इसका एक अद्वितीय पहलू गतिशील संकलन भाग है। आप यहाँ उस पर ऊपर पढ़ सकते हैं: http://msdn.microsoft.com/en-us/library/ms366723

अधिक जानकारी के लिए ASP.NET जीवन चक्र, यहाँ देखो: http://msdn.microsoft.com/en-us/library/ms178472.aspx#general_page_lifecycle_stages

तो बुनियादी तौर पर, एक पृष्ठ का अनुरोध कर रहा है, ASP.NET गतिशील संकलन मूल रूप से करने के लिए उपयोग करता है पृष्ठ बनाएं, और उसके बाद यह पृष्ठ को क्लाइंट को भेजने का प्रयास करता है। सभी कोड चलाए जाएंगे जिन्हें आपने कोड में निर्दिष्ट किया है, इससे कोई फर्क नहीं पड़ता कि क्लाइंट वहां है या नहीं।

यह एक बहुत ही सरल उत्तर है, लेकिन यह मूल बातें है। आपका कोड संकलित है, अनुरोध प्रतिक्रिया उत्पन्न करता है, तो प्रतिक्रिया भेजी जाती है। यह टुकड़ों में तब तक नहीं भेजा जाता है जब तक आप इसे स्पष्ट रूप से नहीं बताते।

संपादित करें: शब्द बदलने पर सिफारिश के लिए क्रिस लाइवली के लिए धन्यवाद।

+1

हालांकि आम तौर पर सच (+1), अंतिम भाग "इसे टुकड़ों में नहीं भेजा जाता है" को बदला जाना चाहिए "यह टुकड़ों में नहीं भेजा जाता है * जब तक कि आप इसे स्पष्ट रूप से * * नहीं बताते। Http://stackoverflow.com/questions/2816194/use-of-response-flush-before-response-end – NotMe

+0

अच्छा बिंदु देखें। इसे प्रतिबिंबित करने के लिए मूल बदल दिया। – JClaspill

+0

धन्यवाद। इसका मतलब क्या है: "यह टुकड़ों में नहीं भेजा जाता है जबतक कि आप इसे स्पष्ट रूप से नहीं बताते"। मैं पृष्ठ पर Response.Flush का उपयोग करें। अगर कोई असर पड़ता है तो मैं घूम रहा हूं? – w0051977

2

आप संभावित स्मृति रिसाव और "कनेक्शन" शब्द को ट्रैक करने का उल्लेख करते हैं। मुझे लगता है कि आप एक डेटाबेस कनेक्शन का मतलब है।

आपको हमेशा अपने सभी कनेक्शन और कमांड using खंडों में लपेटना चाहिए। यह गारंटी देगा कनेक्शन/आदेश ठीक से, एक त्रुटि होती है, तो ग्राहक डिस्कनेक्ट अगर की परवाह किए बिना का निपटारा किया जाता है आदि

वहाँ उदाहरण के बहुत सारे यहाँ हैं, लेकिन यह कुछ ऐसा करने पर निर्भर करता:

using (SqlConnection conn = new SqlConnection(connStr)) { 
    using (SqlCommand cmd = new SqlCommand(conn)) { 
    // do something here. 
    } 
} 

हैं , किसी कारण से, आपका कोड आपको इस तरह से ऐसा करने की अनुमति नहीं देता है, तो मैं सुझाव दूंगा कि अगली चीज़ जो आप करते हैं उसे पुन: व्यवस्थित करें क्योंकि आपने इसे गलत किया है। एक आम समस्या यह है कि कुछ लोग पृष्ठ निष्पादन के शीर्ष पर एक कनेक्शन ऑब्जेक्ट बनाएंगे, फिर पृष्ठ के जीवन के लिए इसका पुन: उपयोग करें। यह समस्याएं उत्पन्न करने की गारंटी है, जिसमें इस तक सीमित नहीं है: कनेक्शन पूल के साथ त्रुटियां, स्मृति की हानि, यादृच्छिक क्वेरी समस्याएं, ऐप की पूर्ण खुराक ...

स्थापना के साथ प्रदर्शन के बारे में चिंता न करें (और छोड़ना) उस बिंदु पर कनेक्शन जो आपको कोड में चाहिए। विंडोज एक कनेक्शन पूल का उपयोग करता है जो बिजली तेज है और जब तक आपका ऐप सिग्नल करता है तब तक कनेक्शन को बनाए रखेगा।

यह भी ध्यान दें: आपको इस पैटर्न का उपयोग हर बार एक गैर-प्रबंधित कक्षा का उपयोग कर रहे हैं।वे हमेशा IDisposable लागू करते हैं।

+1

+1। मैं उन्हें किसी भी मौके का उपयोग करने के लिए और अधिक सहमत नहीं हो सकता। रुचि रखने वालों के लिए और पढ़ें: http://msdn.microsoft.com/en-us/library/yh598w02.aspx और http://www.dotnetperls.com/using – JClaspill

+0

@JClaspill: महान लिंक। – NotMe

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

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