2009-04-06 13 views
71

मैं तहत सोच रहा हूँ किन परिस्थितियों मैं अपने Global.asax फ़ाइल में Application_Start() बनाम Init() में आवेदन initialisation कोड डाल दिया जाना चाहिए?जब Global.asax में बनाम Init Application_Start उपयोग करने के लिए?

दोनों के बीच भेद मुझे बहुत स्पष्ट नहीं लगता है, Application_start के अलावा, पहले Init() कहा जाता है।

  • मैं दूसरे पर एक का उपयोग क्यों करूं?
  • यह वास्तव में एक फर्क पड़ता है?
  • आवेदन राज्य दो घटनाओं के बीच में क्या परिवर्तन?

अब तक केवल वास्तविक सूचक मैं मिल सकती है IHttpModule केवल एक Init() विधि है, इसलिए यदि मैं क्या कुछ बिंदु पर मई कर रहा हूँ बेहतर लागू करने के लिए IHttpModule मैं Global.asax की Init() विधि का उपयोग करना चाहिए उपयुक्त हो, अगर स्थिरता के लिए कुछ और नहीं है।

उत्तर

79

MSDN docs से:

Application_Start और Application_End तरीकों विशेष तरीकों कि HttpApplication घटनाओं का प्रतिनिधित्व नहीं करते हैं। ASP.NET , आवेदन डोमेन के जीवन भर के लिए एक बार उन्हें कॉल नहीं प्रत्येक HttpApplication उदाहरण के लिए।

Init:

एक बार कहा जाता है HttpApplication वर्ग के प्रत्येक उदाहरण के बाद सभी मॉड्यूल बनाए गए हैं।

अद्यतन: यदि आपको यह सुनिश्चित करने की ज़रूरत है कि ऐप में केवल एक बार एक निश्चित कोड कहा जाता है। जीवन चक्र, Application_Start एक बेहतर समाधान है। उदाहरण: log4net को विन्यस्त करना?

+3

फॉलो-अप प्रश्न का बिट: Http अनुप्रयोग का एक उदाहरण कब बनाया गया है? मैं मानता हूं कि प्रत्येक बार कार्यकर्ता-प्रक्रिया को पुनरारंभ किया जाता है और इसमें प्रत्येक कार्यकर्ता-थ्रेड के लिए एक उदाहरण होगा? – roryf

+1

@roryf - asp.net अनुप्रयोग उदाहरणों का एक पूल है कि resused जा सकती है, रखता है। कवर के तहत, सीएलआर थ्रेडपूल का उपयोग करके अनुरोधों की सेवा की जाती है और इनकमिंग अनुरोधों को एक निश्चित दहलीज से परे कतारबद्ध किया जाएगा। मुझे संदेह है कि वे एप्लिकेशन थ्रेसहोल्ड स्तर को उस थ्रेसहोल्ड स्तर पर प्रारंभ करते हैं क्योंकि अधिकांश साइटें उस तरह के यातायात को नहीं देख पाएंगी। मुझे संदेह है कि वे पूल की एक छोटी संख्या के साथ पूल बनाते हैं और फिर मांग के रैंप के रूप में पूल के आकार में वृद्धि करते हैं। –

10

हाँ

उनके बीच अंतर हैं। Application_Start() ईवेंट को केवल एक बार कहा जाता है जबकि प्रत्येक बार Init() विधि को कॉल किया जाता है जब एप्लिकेशन का उदाहरण बनाया जाता है।

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