2011-11-28 25 views
34

दृश्य स्टूडियो 2010 में, यदि आप एक परियोजना की संपत्तियों के लिए जाने के लिए और टैब बिल्ड करने के लिए जाना है, वहाँ के लिए एक चेकबॉक्स है "ट्रेस लगातार परिभाषित करें।" जो # डेफिन ट्रेस करने के बराबर है।ट्रेस नेट/दृश्य स्टूडियो में लगातार परिभाषित

System.Diagnostics.Trace की सभी पद्धतियों का एक [Conditional("TRACE")] उनके आसपास की है।

मेरा प्रश्न है क्यों क्या आप इसे कभी बंद कर देंगे? मेरा मतलब है, अगर आपके पास कोई ट्रेस श्रोताओं को परिभाषित नहीं किया गया है, तो ऐसा नहीं है कि आप एक लॉग या कुछ भरने जा रहे हैं। यह सिर्फ मेरे लिए अजीब लगता है। यदि आप ट्रेस को कॉल करने के प्रयास में जा रहे हैं, तो आप ऐप/वेब.कॉन्फिग के माध्यम से इसे क्यों नियंत्रित नहीं करना चाहते हैं, बल्कि इसके बजाय इसे एक कंपाइलर स्विच के माध्यम से नियंत्रित करें, जो बिना इसे वापस चालू करने की संभावना को नियंत्रित करता है एक recompile।

क्या मुझे कुछ याद आ रही है? निश्चित रूप से, यह प्रदर्शन के लिए बुरा नहीं हो सकता है, है ना?

+5

ट्रेस() कॉलिंग भले ही कोई श्रोताओं हैं मुक्त नहीं है,। इसे बहुत महंगा बनाना मुश्किल नहीं है। –

+0

मुझे नहीं लगता कि यह पर्याप्त दानेदार है हालांकि। जबकि डिबग में आप सब कुछ कर सकते हैं (सूचना, वर्बोज़, आदि) आप आदेश, उन्हें लॉग इन करने में घटनाओं के केवल कुछ प्रकार का पता लगाने के तैनाती (चेतावनी, त्रुटि) में चाहते हो सकता है। वास्तव में TRACE_ERROR, TRACE_VERBOSE, आदि होना चाहिए – luksan

+0

TRACE के बारे में अधिक जानकारी के लिए http://stackoverflow.com/questions/6911863/setting-up-ac-sharp-plplication-for-max-performance-build देखें और अपने निर्माण को अनुकूलित करना । – MBentley

उत्तर

27

मुमकिन है इस चेकबॉक्स /define:TRACE संकलक विकल्प के बराबर है। हो सकता है कि आप रिलीज बिल्ड के लिए इस विकल्प को बंद करना चाहें क्योंकि आप नहीं चाहते हैं कि अंतिम उपयोगकर्ता कुछ कारणों (जैसे सुरक्षा), या प्रदर्शन में सुधार के लिए ट्रेस आउटपुट देखें। बेशक, प्रदर्शन वृद्धि इस बात पर निर्भर करेगी कि यह चालू होने पर कितना काम किया जा रहा है, लेकिन Conditional attribute संकलक को उत्पन्न आईएल से फ़ंक्शन कॉल (किसी स्ट्रिंग स्वरूपण इत्यादि सहित) को पूरी तरह से हटा देगा, इसलिए यह सकता है एक महत्वपूर्ण अंतर बनाते हैं।

+1

क्या यह कहना सही होगा कि कॉल कॉल को पूरी तरह से हटा दिया गया है, कॉल को नो-ऑप के साथ बदल दिया गया है? बाद वाला मुझे लगता है जैसे आप एनओपी को आईएल में डाल देंगे, लेकिन लिंक किए गए एमएसडीएन पेज का सुझाव नहीं है। – Ashe

+2

धन्यवाद, तुम सही हो (के निचले भाग में जॉन स्कीट के जवाब से इसकी पुष्टि [इस सूत्र] (http://bytes.com/topic/c-sharp/answers/237540-conditional-debug-if-debug))। मैंने अपना जवाब सही कर दिया है। –

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