कोड ऑप्टिमाइज़ेशन के उद्देश्य के लिए #if (DEBUG)
प्रीप्रोसेसर निर्देश में Debugger.Log()
पर कॉल को लपेटना आवश्यक है, या RELEASE
कॉन्फ़िगरेशन बनाते समय सी # कंपाइलर अभी भी अनुकूलित कोड का उत्पादन करेगा?क्या मुझे #if (DEBUG) में Debugger.Log() को कॉल लपेटना चाहिए?
उत्तर
वहाँ किसी भीविज्ञप्ति मोड में इस फोन पर अनुकूलन की तरह नहीं है।
कॉल IL
में मौजूद है। केवल अंतर यह है कि DEBUGGER मौजूद नहीं होने पर इसका कोई प्रभाव नहीं पड़ता है।
:
अगर कोई डिबगर संलग्न है, इस विधि कोई प्रभाव नहीं है।
मैं आपके ऐप के प्रदर्शन को मापने का सुझाव दूंगा और उसके बाद अनुसरण करने के लिए चरणों का चयन करें।
यदि कोई महत्वपूर्ण अंतर नहीं है (आपके ऐप के दृष्टिकोण से), तो मैं उस लॉग को छोड़ दूंगा।
इस तरह, जरूरत के क्षण में, आप अपने ऐप में डीबगर के साथ देते हैं और आपको संदेश भेजे जाने लॉग से आवश्यकता हो सकती है के रूप में Debugger.Log
कि बिंदु पर काम करेगा मिल सकती है।
निम्नलिखित कोड का एक त्वरित परीक्षण (नेट 4, रिलीज, किसी भी सीपीयू)
class Program
{
static void Main(string[] args)
{
#if (DEBUG)
Debugger.Log(0, "category", "msg");
#endif
}
}
इस आईएल
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack 8
L_0000: ret
}
आप देख सकते हैं वहाँ Debugger.Log
लिए कोई कॉल नहीं है पैदा करता है।
यह Debugger.Log() के लिए घोषणा है, संदर्भ स्रोत से लिया गया है:
// Posts a message for the attached debugger. If there is no
// debugger attached, has no effect. The debugger may or may not
// report the message depending on its settings.
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern void Log(int level, String category, String message);
नोट कोई [सशर्त] पद्धति पर विशेषता है और यह [MethodImplAtttribute] विशेषता वहन करती है। जिसका अर्थ है कि विधि वास्तव में सीएलआर में लागू की गई है, जिसे सी ++ कोड में लिखा गया है।
तो विधि कॉल कॉन्फ़िगरेशन के बावजूद किया जाएगा। आप एसएससीएलआई 20 स्रोत वितरण, clr/src/vm/debugdebugger.cpp से विधि के कार्यान्वयन को पा सकते हैं। यह OutputDebugString() का उपयोग करता है, एक Winapi फ़ंक्शन जो डीबगर में स्ट्रिंग प्रदर्शित करता है, अगर कोई संलग्न है। या SysInternals 'DbgView.exe जैसी उपयोगिता में। यदि न तो मौजूद है तो एपीआई कॉल कुछ भी नहीं करता है और जल्दी से लौटाता है। आप केवल फ़ंक्शन कॉल ओवरहेड के लिए भुगतान करते हैं, कुछ हनोसेकंड्स का मुट्ठी भर।
विधि कॉल के बारे में अनुकूलित करने के लिए कुछ भी सभ्य नहीं है, यह वैसे ही करेगा जैसे आप डीबग या रिलीज कॉन्फ़िगरेशन बनाते हैं। रिलीज बिल्ड में डीबग जानकारी तक पहुंचने के लिए निश्चित रूप से आसान हो सकता है, यह तय करने के लिए आप पर निर्भर है कि यह एक ऐसी सुविधा है जिसे आप बंद करना चाहते हैं। क्या उन नैनोसेकंडों के आपके कार्यक्रम पर एक प्रभावशाली प्रभाव पड़ता है, यह बताना मुश्किल है। मापो, कुछ भी मत मानो।
- 1. जब #if DEBUG
- 2. क्या मुझे अपने सभी डब्ल्यूसीएफ सेवा कोड को कैच ब्लॉक में लपेटना चाहिए?
- 3. क्या Asp.net मार्कअप के लिए #IF DEBUG है?
- 4. क्या मुझे अपने सभी सी ++ कोड को अपने नामस्थान में लपेटना चाहिए?
- 5. क्या मुझे हमेशा अपना कोड कोशिश करने में लपेटना चाहिए ... ब्लॉक को पकड़ें?
- 6. #if DEBUG ब्लॉक में विकास शॉर्टकट डालना बुरा विचार है?
- 7. मुझे $() के साथ एक DOM ऑब्जेक्ट कब लपेटना चाहिए?
- 8. सी # में #if DEBUG प्री-प्रोसेसर निर्देश का उपयोग क्या है? हमें इसका उपयोग कब करना चाहिए?
- 9. लपेटना या लपेटना नहीं: सेवा सुविधा में डेटा एक्सेस लपेटना
- 10. संपत्ति सेटर को लपेटना
- 11. अवांछनीय ब्रेनट्री एपीआई: क्या मुझे स्रोत कोड बदलना चाहिए या व्यक्तिगत रूप से हर वर्ग को लपेटना चाहिए?
- 12. क्या एक मोनाड ट्रांसफॉर्मर में फ़ंक्शन लपेटना चाहिए/क्या खराब अभ्यास माना जाना चाहिए?
- 13. मुझे देखने में क्या करना चाहिए DidUnload?
- 14. उद्देश्य-सी में आलसी लोडिंग - क्या मुझे गेटर के भीतर से सेटटर को कॉल करना चाहिए?
- 15. ब्रेसिज़ में एकाधिक कथन लपेटना
- 16. मुझे क्या करना चाहिए?
- 17. क्या मुझे ओआरएम चाहिए?
- 18. क्या जेबीपीएम मुझे चाहिए?
- 19. क्या मुझे urllib.urlopen() के बाद नज़दीकी() कॉल करना चाहिए?
- 20. क्या @if()
- 21. क्या हमें हमेशा अपवाद पकड़ना चाहिए, इसे लपेटना चाहिए और इसे पास करना चाहिए?
- 22. मुझे कॉल को कहां रखना चाहिए [FBSettings publInstall: appId]
- 23. क्या मुझे यहां लॉक चाहिए?
- 24. php - क्या मुझे कॉल करने के बाद बाहर निकलें() कॉल करना चाहिए: हेडर?
- 25. एक सिंक्रोनस अवरुद्ध धागे में एसिंक्रोनस कॉल लपेटना?
- 26. क्या आप अपनी परियोजना में अपनाए गए तृतीय पक्ष पुस्तकालयों को लपेटना चाहिए?
- 27. क्या मुझे मार्कडाउन को स्वच्छ करना चाहिए?
- 28. COM में: क्या मुझे CoCreateInstance के बाद AddRef को कॉल करना चाहिए?
- 29. स्कैला में एसओएपी-प्रॉक्सी - मुझे क्या चाहिए?
- 30. DEBUG = False