2012-07-02 6 views
7

यदि मेरे पास WPF एप्लिकेशन है और डिबगिंग उद्देश्यों के लिए कंसोल पर प्रदर्शित होने वाले संदेश हैं। यह विंडोज अनुप्रयोग के रूप में कॉन्फ़िगर किए जाने पर एप्लिकेशन के प्रदर्शन को प्रभावित करेगा और कोई कंसोल प्रदर्शित नहीं किया जा रहा है?कंसोल है। विंडोज अनुप्रयोगों में एक बाधा डालें?

+6

ठीक है, डिबगिंग उद्देश्यों के लिए क्यों Debug.WriteLine का उपयोग नहीं करते? यह "आउटपुट" विंडो में आउटपुट करता है, लेकिन अगर मुझे गलत नहीं लगता है तो विजुअल स्टूडियो विकल्पों के माध्यम से तत्काल विंडो पर रीडायरेक्ट किया जा सकता है। – erodewald

+0

इसे मापें और आपको निश्चित रूप से पता चलेगा :-) –

+0

एएसपी के लिए समान प्रश्न।नेट, गारंटी नहीं देगा उत्तर एक जैसा है: http://stackoverflow.com/questions/137660/where-does-console-writeline-go-in-asp-net –

उत्तर

5

कंसोल में असली बाधा। राइटलाइन() वास्तव में कंसोल पर लिख रही है। वास्तव में महंगा है, खासकर जब कंसोल को स्क्रॉल करने की आवश्यकता होती है। जब कोई कंसोल नहीं होता है और आउटपुट विंडो में इसे प्रदर्शित करते समय आउटपुट को कैप्चर करने वाले विजुअल स्टूडियो होस्टिंग प्रक्रिया में भी काफी ओवरहेड होता है।

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

यदि आपके ऐप को अब डिबग बिल्ड में चलते समय स्वीकार्य perf है, तो इसके बारे में चिंता न करें। यदि आप डिबगर के बिना रिलीज बिल्ड में तारकीय perf से कम देखते हैं और आपको लगता है कि यह Console.WriteLine() के कारण हो सकता है तो खोज करने में संकोच नहीं करें + इसे डीबग.प्रिंट() पर बदलें।

2

एक बाधा का तात्पर्य है कि यह आपके कोड में सबसे धीमा बिंदु है। हम यह नहीं जान सकते कि जब तक हम सब कुछ नहीं कर रहे हैं, हम जानते हैं।

क्या कोई प्रदर्शन प्रभाव बिल्कुल है, हां, शायद। यह कुछ भी नहीं कर रहा है, यह कुछ कर रहा है। क्या यह आपके कार्यक्रम के लिए बाधा बनने के लिए पर्याप्त होगा, मुझे अत्यधिक संदेह है। क्या यह एक उल्लेखनीय प्रभाव होने के लिए पर्याप्त होगा, यह संभव है, लेकिन असंभव है। यह सब इस बात पर निर्भर करता है कि आपका प्रोग्राम और क्या कर रहा है, और आप कंसोल पर कितना लिख ​​रहे हैं (यह आपके लिए जितना समय लगेगा उसे ध्यान में रखना शुरू करने के लिए बहुत कुछ होना चाहिए।)

जैसा कि उल्लेख किया गया था टिप्पणियां, आप का उपयोग Console.WriteLine के बजाय कर सकते हैं ताकि आप डिबगिंग के दौरान आउटपुट देख सकें, लेकिन जब आप रिलीज बिल्ड को संकलित करते हैं तो यह उन कथनों को प्रिंट नहीं करेगा।

0

कुछ करने से हमेशा कुछ भी करने से अधिक समय लगता है।

एक शून्य कंसोल पर पाठ लिखने का कार्य एक प्रमुख प्रदर्शन हिट नहीं होना चाहिए, लेकिन आप पैरामीटर के रूप में क्या गुजर रहे हैं, और किस मात्रा में हो सकता है।

अपने कंसोल आउटपुट के साथ और बिना वास्तविक प्रदर्शन को मापें कि आपके उपयोग पैटर्न आपके स्वीकार्य सहनशीलता के भीतर हैं या नहीं।

डीबग.राइटलाइन() आपकी आवश्यकताओं के आधार पर बेहतर विकल्प हो सकता है, क्योंकि जब आप रिलीज के लिए तैयार होते हैं तो इन्हें स्वचालित रूप से बाहर कर दिया जाएगा।

0

अपने स्वयं के लॉगिंग फ्रेमवर्क को बनाने और अनुकूलित करने का प्रयास शायद ही कभी सबसे अच्छा तरीका है।

क्या आपने log4net जैसे कुछ देखा है? आप कंसोल पर लॉगिंग सहित विभिन्न परिशिष्टों को कॉन्फ़िगर कर सकते हैं। आप लॉगिंग ओवरहेड को वास्तव में कम करने के लिए एसिंक एपेंडर भी बना सकते हैं।

एरिक

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