2013-02-09 44 views
9

के बीच प्रदर्शन अंतर मैं अपने प्रदर्शन को बेहतर बनाने के लिए एक जावास्क्रिप्ट एन्कोड फ़ंक्शन (सी # में) को अनुकूलित करने का प्रयास कर रहा हूं (एंटरप्राइज़ वेब एप्लिकेशन के प्रदर्शन में सुधार के समग्र प्रयास में) । हमने .NET HttpUtility.JavaScriptStringEncode का उपयोग करने का प्रयास किया है, लेकिन यह हमारी डेटा परत की अपेक्षा करने वाले तरीके को एन्कोड नहीं करता है (और डेटा परत बदलना तालिका पर नहीं है)।.NET विधि (.dll) और परिलक्षित संस्करण

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

मैं उत्सुक हूं कि क्यों। इस तरह के प्रदर्शन में वृद्धि के लिए .NET फ़ंक्शन अलग-अलग कैसे तैयार किया जाता है?

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

+1

दिलचस्प। बस सुनिश्चित करें, लेकिन आपने एक ही पीसी और पेज पर रिलीज मोड के तहत इन बेंचमार्क को चलाया, है ना? ओह, और क्या आपने यह सुनिश्चित करने के लिए एक ही रन में कई बार परीक्षण चलाया था कि जेआईटी ने आपको बेंचमार्क करने से पहले सभी कोड जेनरेट किए थे? – Cameron

+1

क्या वास्तविक रनटाइम परिवर्तन था, या केवल समग्र पृष्ठ लोड का अंश था? शायद पृष्ठ अधिक जटिल है और कुल धीमा है। –

+0

मैं सर्विसस्टैक सीरिएलाइज़र (NuGet के माध्यम से उपलब्ध) का उपयोग करने का प्रयास करता हूं; यह तेज़ है लेकिन अभी भी काफी लचीला है। प्रदर्शन माप के लिए, कोड को यूनिट परीक्षण या इसी तरह से अलग करने का प्रयास करें, ताकि आप बार-बार पुनरावृत्ति कर सकें और आसानी से विभिन्न दृष्टिकोणों की तुलना कर सकें। आईआईएस के माध्यम से चलने वाले बेंचमार्किंग कोड आमतौर पर आदर्श नहीं होते हैं क्योंकि कई अन्य कारक परिणाम को छोड़ सकते हैं। ध्यान दें कि .NET के साथ डीएल का शिपिंग आमतौर पर प्रीकंपिल्ड होता है और इसलिए रनटाइम पर JIT'ed नहीं होना चाहिए। –

उत्तर

1

क्या आप .NET लाइब्रेरी में मौजूद आईएल कोड के साथ अपनी लाइब्रेरी में परावर्तित कोड पेस्ट करने के बाद उत्पादित आईएल कोड की तुलना कर सकते हैं? कंपाइलर स्विच संकलन के लिए इस्तेमाल किया जा रहा है इस तरह के मतभेद पैदा कर सकते हैं।