2010-08-06 23 views
12

डीबग बिल्ड और रिलीज बिल्ड के बीच एक विंडोज सेवा लाभ कितना प्रदर्शन लाभ (यदि कोई हो) हो सकता है और क्यों?सी # डीबग बनाम रिलीज

+0

यह एक अच्छा सवाल है कि कुछ बेंचमार्क मेट्रिक्स द्वारा अच्छी तरह से सेवा दी जा सकती है, अगर कोई उन्हें प्रदान कर सकता है। – kbrimington

+0

[सी # डीबग बनाम रिलीज प्रदर्शन] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/2446027/c-debug-vs-release-performance) –

उत्तर

6

प्रबंधित कोड के लिए, जब तक आपके पास डीबीयूजी बिल्ड के लिए सशर्त रूप से संकलित नहीं किया जाता है, वहां थोड़ा अंतर होना चाहिए - आईएल काफी समान होना चाहिए। डीबगर के तहत चलाने पर जिटर अलग-अलग उत्पन्न करता है या नहीं - आईएल के संकलन को ज्यादा प्रभावित नहीं किया जाता है।

आईएल को संकलित करते समय /optimize कुछ चीजें हैं, लेकिन वे विशेष रूप से आक्रामक नहीं हैं। और उनमें से कुछ आईएल ऑप्टिमाइज़ेशन शायद जिटर ऑप्टिमाइज़ेशन द्वारा संभाले जाएंगे, भले ही उन्हें आईएल में अनुकूलित नहीं किया गया हो (जैसे नाप्स को हटाने)।

देखें एरिक Lippert के लेख http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx जानकारी के लिए:

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

पढ़ें एरिक के लेख के बारे में /optimize आईएल पीढ़ी में अलग तरीके से करते है।

+0

अच्छी चीजें ... सुरक्षा के बारे में क्या? यदि आप डीबग जानकारी के साथ शिप/एक्सपोज़ करते हैं, तो क्या एक निरीक्षण आपके कोड के बारे में अधिक बताएगा? यहां तक ​​कि यदि प्रदर्शन में नगण्य अंतर है, तो भी मुझे डीबग कोड नहीं भेजना चाहिए जब तक कि मुझे नहीं करना पड़ा। –

+1

@ एडवर्ड: मैं वास्तव में DEBUG बिल्डों को वितरित करने की वकालत नहीं कर रहा हूं, बस यह कह रहा हूं कि आपको शायद DEBUG और रिलीज बिल्ड के बीच प्रदर्शन में एक बड़ा अंतर की उम्मीद नहीं करनी चाहिए।साथ ही, मुझे नहीं लगता कि एक डेबग बिल्ड में असेंबली में कोई और जानकारी है - डीबग जानकारी .pdb फ़ाइल में जाती है, जिसे आपको वितरित करने की आवश्यकता नहीं होती है। .NET असेंबली आमतौर पर बहुत आसानी से अलग/पृथक होते हैं (परावर्तक उपकरण देखें)। यदि आप रिवर्स इंजीनियरिंग के बारे में चिंतित हैं, तो इसके साथ मदद करने के लिए obfuscation उपकरण हैं, लेकिन मुझे वास्तव में उनके बारे में कुछ भी पता नहीं है। –

+1

धन्यवाद ... मैं डीबीग जानकारी रखने वाले .pdb के बारे में भूल गया। बहुत सारे obfuscation उपकरण पूर्ण प्रमाण और संभावित रूप से महंगा नहीं हैं। मैं हमेशा मानता हूं कि कोई वास्तव में चाहता है, तो वे अंदर आ जाएंगे। मुझे अधिक समय व्यतीत करना और कम समय की रक्षा करना चाहिए। –

1

ठीक है, हालांकि सवाल एक डुप्लिकेट है, मुझे लगता है कि मूल प्रश्न में कुछ बेहतर उत्तर बहुत नीचे हैं। व्यक्तिगत रूप से मैंने ऐसी स्थितियों को देखा है जहां डीबग और रिलीज मोड के बीच एक सराहनीय अंतर है। (उदाहरण: Property performance, जहां डीबग और रिलीज मोड में गुणों तक पहुंचने के बीच 2x अंतर था)। क्या यह अंतर एक वास्तविक सॉफ्टवेयर (प्रोग्राम की तरह बेंचमार्क के बजाए) में मौजूद होगा, यह बहस योग्य है, लेकिन मैंने इसे एक ऐसे उत्पाद में देखा है जिस पर मैंने काम किया था।

मूल प्रश्न पर नील के जवाब से, msdn social से:

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

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

निष्पादन पते पर ब्रेकपॉइंट्स मैपिंग डीबगर का काम है। यह .pdb फ़ाइल और जेआईटी कंपाइलर द्वारा उत्पन्न जानकारी का उपयोग करता है जो कोड पता मैपिंग के लिए आईएल निर्देश प्रदान करता है। यदि आप अपना खुद का डीबगर लिखेंगे, तो आप आईसीओआरडीबगोड :: GetILToNativeMapping() का उपयोग करेंगे।

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