2009-05-03 6 views
8

मैंने हाल ही में अपने चमकदार नए वीपीएस में एक एएसपी.NET एप्लिकेशन तैनात किया है और जब मैं सामान्य प्रदर्शन में खुश हूं, तो एक वीपीएस एक साझा होस्टिंग समाधान पर दे सकता है, मैं अपने आवेदन के स्टार्टअप समय से नाखुश हूं ।मेरे एएसपी.NET ऐप को हमेशा "जिंदा" रखने के लिए, और यदि यह एक बुरा विचार है, तो मुझे ऐसा क्यों नहीं करना चाहिए?

मेरा वेब एप्लिकेशन शुरू करने के लिए उचित समय लेता है जब मेरा ग्राहक इसे पहले हिट करता है। मैं इसे डीबग मोड में नहीं चला रहा हूं (अक्षम है कि मेरे web.config में), और स्टार्टअप पर ऐसा करने के लिए कोई वास्तविक काम नहीं है - मेरे पास मेरे एप्लिकेशन में ईवेंट कोड हैंडलर शुरू नहीं है, मैं कोई भी शुरू नहीं करता अतिरिक्त धागे, कुछ भी नहीं। पहली बार जब मेरा ग्राहक मेरे आवेदन को हिट करता है तो जवाब देने में 15-20 सेकंड लगते हैं। बाद में कॉल 1-2 सेकंड लेते हैं, जब तक कि मैं अपने एप्लिकेशन को बंद करने के लिए कुछ मिनट प्रतीक्षा नहीं करता। फिर यह 15-20 सेकंड स्टार्टअप समय पर वापस आ गया है।

(मुझे पता है कि मेरा समय बेंचमार्क बहुत अवैज्ञानिक है, उन नंबरों को केवल मेरे ऐप के स्टार्टअप पर प्रदर्शन के लिए महसूस करना चाहिए)।

एएसपी.नेट की मेरी समझ यह थी कि आईआईएस (7.0, इस मामले में), वेब एप्लिकेशन को पहली बार चलाने के लिए संकलित करता है, और तब तक उन बाइनरी को कैश करता है जब तक कि वेब एप्लिकेशन बदल नहीं जाता है। क्या मेरी समझ गलत है?

तो, कि पुस्तक के आकार प्रस्तावना के बाद, यहाँ मेरे सवालों हैं:

  • ASP.NET के संकलन की मेरी समझ गलत है? यह वास्तव में कैसे काम करता है?
  • क्या कोई तरीका है कि मैं आईआईएस को अपनी बाइनरी को कैश करने के लिए मजबूर कर सकता हूं, या अपना आवेदन अनिश्चित काल तक जीवित रख सकता हूं?
  • यदि मेरे पिछले प्रश्न में से किसी एक चीज को करने का बुरा विचार है, तो यह एक बुरा विचार क्यों है, और स्टार्टअप प्रदर्शन को बढ़ाने के बजाय मैं क्या कर सकता हूं?

धन्यवाद!

संपादित करें: ऐसा लगता है मेरे सवाल this question के एक मामूली डुप्लिकेट (मैंने सोचा कि मैं एक जवाब के लिए यहाँ पर यह करने के लिए खोज का एक बेहतर काम किया है, haha) है। मुझे लगता है कि, हालांकि, मेरा प्रश्न अधिक व्यापक है, और अगर मैं इसे बेहतर तरीके से पहले से पूछे जाने वाले प्रश्नों को संबोधित करता हूं, तो इसे डुप्लिकेट के रूप में बंद नहीं किया गया था, तो मैं सराहना करता हूं।

+1

मैं इसी तरह के एक ही दृष्टिकोण का सुझाव देने जा रहा था क्योंकि अन्य समान प्रश्नों के उत्तरदाताओं ने सुझाव दिया था। क्या आप वाकई उस प्रश्न के उत्तर आपकी आवश्यकताओं को पूरा नहीं करेंगे? मुझे लगता है कि वे स्थिति को अच्छी तरह से समझाते हैं। – DOK

+0

@ डीओके, आपकी प्रतिक्रिया के लिए धन्यवाद, दूसरा सवाल मेरे प्रश्न के "कैसे" के रूप में अच्छा था, लेकिन मुझे लगता है कि मेरे प्रश्न में इस मुद्दे के "क्यों" और सर्वोत्तम प्रथाओं को शामिल किया गया है। –

+1

मुझे लगता है कि एसओ पर इस्तेमाल किया गया खोज एल्गोरिदम वास्तव में खराब है - इसलिए डुप्लिकेट। –

उत्तर

3

आईआईएस इसकी कॉन्फ़िगरेशन के आधार पर दिए गए समयावधि के बाद भी आपके वेब ऐप को बंद कर देता है। मैं आईआईएस 7 से परिचित नहीं हूं और इसे कहां कॉन्फ़िगर करना है, इसलिए आप इसे कॉन्फ़िगर करने के तरीके पर थोड़ा सा शोध करना चाहेंगे (starting point?)।

क्या यह बुरा है? इस पर निर्भर करता है कि आपका कोड कितना अच्छा है। यदि आप स्मृति या संसाधनों को लीक नहीं कर रहे हैं, तो शायद नहीं।

अन्य समाधान precompile your website है। यह आपके लिए बेहतर विकल्प हो सकता है। हालांकि, आप इसे अपनी वेबसाइट से कैसे सहभागिता करते हैं, इस पर निर्भर करते हुए, इसे नीचे की ओर देखना होगा और देखेंगे।

+2

जैसा कि ऊपर चर्चा की गई है, आपको यह सुनिश्चित करने के लिए आईआईएस में 'निष्क्रिय टाइम-आउट' सेट करने की आवश्यकता है ताकि एप्लिकेशन को स्मृति से जल्द ही हटाया न जाए (डिफ़ॉल्ट 20 मिनट मुझे विश्वास है)। यह प्रीकंपिलेशन के अतिरिक्त है, अधिकतम मूल्य ऐप पूल रीसायकल समय के साथ-साथ अपनी टोपी भी है। एप्लीकेशन पूल> [उपयोग में पूल]> उन्नत सेटिंग्स> निष्क्रिय समय-समय – rjarmstrong

2

ASP.NET के मेरे समझ गया था कि आईआईएस (7.0, इस मामले में), एक वेब अनुप्रयोग के लिए पहली बार यह कभी चलाया जाता है संकलित है, और के रूप में वेब अनुप्रयोग बदल गया है तो इस तरह के एक समय जब तक उन बाइनरी कैश । क्या मेरी समझ गलत है?

यह सही है। विशेष रूप से, असेंबली छाया प्रतियों के रूप में बनाई जाती हैं (वॉल्यूम स्नैपशॉट सेवा/छाया प्रति सुविधा के साथ उलझन में नहीं)। यह आपको मौजूदा चल रहे सत्रों को प्रभावित किए बिना फ्लाई पर फ़ोल्डर में कोड को प्रतिस्थापित करने में सक्षम बनाता है। एएसपी.नेट परिवर्तन का पता लगाएगा, और नए संस्करणों को लक्ष्य निर्देशिका में संकलित करेगा (आमतौर पर Temporary ASP.NET Files)। उस प्रक्रिया पर अधिक: Understanding ASP.NET Dynamic Compilation

1

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

मुझे आश्चर्य होगा अगर यह सभी संकलन समय है (हार्डवेयर के आधार पर) - क्या आपके पास कक्षाओं के बहुत से स्थिर उदाहरण हैं? क्या वे स्टार्ट-अप पर बहुत काम करते हैं?

या तो ट्रेसिंग या प्रोफाइलिंग के साथ आप शायद जल्दी से काम कर सकते हैं जहां स्टार्ट-अप समय बिताया गया था।

क्यों एक प्रक्रिया को चारों ओर रखना एक बुरा विचार है, मुझे विश्वास है कि यह साफ़ होने के कारण है। कोई फर्क नहीं पड़ता कि हम अपने डेटा की कितनी अच्छी तरह देखते हैं या जीसी कितनी अच्छी तरह से व्यवहार करते हैं, प्रक्रिया को पुनरारंभ करके निष्पादित एक अच्छा स्पष्ट है। विखंडन जैसी चीजें दूर हो सकती हैं और समय के साथ बनने वाले किसी अन्य संसाधन मुद्दे को साफ़ कर दिया जाता है। इसलिए सर्वर प्रक्रिया को अनिश्चित काल तक चलाना बहुत बुरा विचार है।

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

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