2011-01-21 6 views
8

मेरे पास एक एएसपी.NET एप्लिकेशन है जो मेरी विंडोज़ विकास मशीन पर अच्छी तरह से काम कर रहा है। सर्वर लिनक्स चल रहा है हालांकि, और एक बार अपलोड किया गया एक ही कोड विंडोज बॉक्स पर 4 या 5 गुना धीमा चल रहा है (उदाहरण के लिए एक कार्य के लिए 25 सेकंड बनाम 5 सेकंड लेना)।सी # कोड आईआईएस पर जल्दी चलता है, लेकिन मोनो पर धीमा - इसे कैसे सुधारें?

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

+2

क्या करना है: विंडोज़ के लिए भुगतान :) गंभीरता से हालांकि, मोनो एमएस .NET की तुलना में 2-5 गुना धीमा हो जाता है। क्या आप नवीनतम मोनो का उपयोग कर रहे हैं? संस्करण 2.8 मुझे काफी अच्छा प्रदर्शन महसूस किया। – leppie

+1

इसे पढ़ा? http://stackoverflow.com/questions/929210/performance-of-asp-net-in-monolinux-vs-iiswindow – naveen

+0

यदि यह एकमात्र तरीका है तो मैं विंडोज होस्टिंग में जाऊंगा। मैंने पढ़ा था कि मोनो प्रदर्शन लगभग एएसपी.नेट के बराबर था, इसलिए मैं सोच रहा था कि क्या मैं कुछ खो रहा था क्योंकि प्रदर्शन इतना खराब है। – mikel

उत्तर

6

regexes अनुभाग "mod_mono और mod_proxy" देख मोनो के लिए एक विशेष रूप से कमजोर क्षेत्र है। मोनो रेगेक्स क्लास हमेशा व्याख्या किए गए कोड का उपयोग करती है, जबकि नेट इसे संकलित आईएल में बदल सकता है, जिसके परिणामस्वरूप बहुत तेजी से निष्पादन होता है।

प्रतिस्थापन जैसे टेक्स्ट प्रोसेसिंग के अधिकांश अन्य रूप लगभग समान होना चाहिए।

+1

धन्यवाद, यह मामला दिखता है। कुछ माइक्रोबेंचमार्कों को चलाने से पता चला कि आईआईएस की तुलना में मोनो पर एक ही रेगेक्स दस (!) धीमे थे। मैं उनके बारे में भी एक बगजिला (https://bugzilla.novell.com/show_bug.cgi?id=655133) पर एक 'महत्वपूर्ण' बग भर गया। सामान्य रूप से धीमी कार्यक्षमता शेष देरी के लिए जिम्मेदार लगती है, लेकिन यदि रीगिक्स के लिए नहीं तो यह संभवतः स्वीकार्य होगा। मैं सोचता हूं कि आईआईएस में माइग्रेट करने जा रहा हूं। – mikel

1

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

लेकिन मुझे लगता है कि लेप्पी के सिर पर है, माइक्रोसॉफ्ट ने आईआईएस में बहुत से पैसे परीक्षण और एएसपीनेट को एकीकृत किया ताकि यह वास्तव में वास्तव में तेज़ हो। यदि आप एमएस बॉक्स के लिए भुगतान नहीं करना चाहते हैं, तो आपको इस तथ्य से निपटना होगा कि मोनो ओपन सोर्स है और आईआईएस एक परीक्षण वाणिज्यिक उत्पाद है।

एक अच्छा उदाहरण यहां है, जहां माइक्रोसॉफ्ट ने वास्तव में विंडोज़ को कर्नेल मोड लाइब्रेरी के साथ संशोधित किया जो आईआईएस सर्वर के साथ काम करता है। HTTP.sys

1

आप इस के लिए mod_mono या mod_proxy उपयोग कर रहे हैं: सही ढंग से कैश का उपयोग कर ठीक से इस कोड में बहुत अच्छा प्रदर्शन बढ़ जाती है प्राप्त कर सकते हैं क्षुधा architected? जबकि आप मोनो से बाहर निकलने के लिए सीमाएं हैं, तो आपको mod_proxy से mod_mono का उपयोग करके कम सामान्य देरी भी मिल जाएगी।

कृपया Mono ASP.NET FAQ

+0

यह पहले से ही mod_mono का उपयोग कर रहा है। – mikel

1

According to this academic study, कुछ लिनक्स सिस्टमों के कारण कुछ लिनक्स वितरणों में मोनो प्रदर्शन में बाधा आ सकती है क्योंकि "हार्ड ड्राइव कैश/स्वैप स्पेस पर जाने के लिए बहुत तेज़ प्रवृत्ति" [विंडोज़ की तुलना में]।

"कृपया सरणी फेडोरा कोर 4 टेस्ट 3 ऑपरेटिंग सिस्टम 3 से अधिक बार की तुलना में धीमी प्रदर्शन में विशाल अंतर दो ऑपरेटिंग सिस्टम भी मूल कोड के उपयोग में संकेत दिया। 131,072 पूर्णांकों पर ध्यान दें विंडोज़ में सटीक एक ही कोड। "

के रूप में लिनक्स वितरण गिरी शेड्यूलिंग विन्यास में भिन्नता है, यह पता है कि ओएस वितरण और संस्करण आप अपने लिनक्स सर्वर पर चल रहे हैं उपयोगी होगा, और कितना स्मृति और CPU चक्र अपने आवेदन करने के लिए उपलब्ध हैं।

4

मोनो इंस्टॉल करें, अधिमानतः आपके सर्वर के समान लिनक्स सिस्टम पर। मोनो पर अपना कोड पर प्रोफ़ाइल देखें और देखें कि बाधाएं कहां हैं।

मेरे पास एक लिनो सर्वर पर चल रहा एक मोनो ऐप है जो अपाचे लॉग फ़ाइलों का पालन करता है। मैंने इसे विंडोज़ पर विकसित किया और लिनक्स पर इसका परीक्षण करते समय, मुझे लगता है कि यह मोनो 2.4 बनाम पर 8-10 गुना धीमा है।नेट 3.5। इसका अधिकांश समय Regex.Match और स्ट्रिंग फ़ंक्शंस में बिताया जाता है। मैं StringComparison.Ordinal को स्ट्रिंग करने के लिए 4 कॉल में केवल निर्दिष्ट करके मोनो में प्रोग्राम की समग्र गति को दोगुना करने में सक्षम था। EndsWith()। यदि आपराधिक स्ट्रिंग तुलना आप चाहते हैं, जो आपको गति बढ़ाने दे सकती है।

स्ट्रिंग कॉम्पर्सन के साथ भी। ऑर्डिनल, स्ट्रिंग। स्टार्ट्सविथ() अभी भी धीमा था। मुझे स्ट्रिंग के अपने संस्करण को लिखकर समग्र प्रोग्राम की गति में 25% की वृद्धि मिली है। स्टर्ट्सविथ()।

तो यदि आपके ऐप को करने की आवश्यकता होती है तो सामान्य तुलनाएं होती हैं, स्ट्रिंग कॉम्पर्सन निर्दिष्ट करें। ऑर्डिनल या अपने स्वयं के स्ट्रिंग फ़ंक्शंस लिखना।

+0

दिलचस्प, धन्यवाद। मैं इसे जाने दूंगा। – mikel

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