मैं दूसरे दृष्टिकोण
वास्तव में क्या parametrized प्रवेश के लाभ है से मेरे दो सेंट डाल करने की कोशिश करेंगे?
तुम बस toString()
मंगलाचरण और स्ट्रिंग संयोजन स्थगित जब तक वास्तव में जरूरत है, जो तुम सच में संदेश लॉग इन करना होगा जब। यह उस विशेष लॉगिंग ऑपरेशन को अक्षम होने पर प्रदर्शन को अनुकूलित करता है। यदि सुनिश्चित नहीं है तो source code for SLF4J देखें।
क्या पैरामीट्रिज्ड लॉगिंग सभी मामलों में गार्ड को बेकार बनाता है?
सं
जो मामलों में प्रवेश गार्ड उपयोग की हो सकता है?
जब अन्य संभावित महंगे संचालन होते हैं।
उदाहरण के लिए (मामले इस विशेष प्रवेश आपरेशन अक्षम किया गया है में), अगर हम कोई प्रवेश गार्ड है
logger.debug("User: {}", getUserService().getCurrentUser());
- हम लागत
obj = getUserService().getCurrentUser()
- से भुगतान करने होंगे हम बचत होगी
"User name: " + obj.toString()
की लागत यदि हम उपयोग लॉगिंग गार्ड:
if (logger.isDebugEnabled()) {
logger.debug("User: {}", getUserService().getCurrentUser());
}
- हम का भुगतान करेगा
logger.isDebugEnabled()
- की लागत हम लागत की बचत होगी
obj = getUserService().getCurrentUser()
- से हम
"User name: " + obj.toString()
से लागत की बचत होगी
बाद के सी में एएसई, जब हम इस विशेष लॉगिंग ऑपरेशन को सक्षम करते हैं, तो हम isDebugEnabled()
को दो बार जांचने की कीमत पर दोनों लागतों को बचाएंगे।
नोट: यह केवल एक उदाहरण है, यहां अच्छे/बुरे प्रथाओं पर बहस करने की कोशिश नहीं कर रहा है।
धन्यवाद fgelz, यह सबसे स्पष्ट स्पष्टीकरण है इसलिए मैंने अपना दिमाग जवाब बदल दिया। बनाता है आपको लगता है सभी विभिन्न चौखटे के बावजूद, वहां अभी भी प्रवेश दुनिया में नवाचार के लिए कमरा, महंगा आपरेशन टाल के संदर्भ में है कि .. शायद प्रतिनिधियों –
@MarkD JDK 8 परियोजना लैम्ब्डा नवाचार (http मदद करने के लिए जा रहा है के साथ: // openjdk .java.net/परियोजनाओं/लैम्ब्डा /) – fglez
तुम भी है कि (जैसे logger.debug (स्ट्रिंग, वस्तु ..) एक varargs विधि बुला वास्तव में कवर logger.debug (स्ट्रिंग, नई वस्तु [के तहत कर रही है के बारे में पता होना चाहिए। ..])। इसलिए यदि आप कॉल को लपेट नहीं पाते हैं, तो आप इस विधि को पार करते समय हर बार एक नया ऑब्जेक्ट सरणी बना रहे हैं (फिर भी निपटान कर रहे हैं), भले ही आप सामग्री को कभी नहीं लिखते। अगर आपके पास अत्यधिक प्रदर्शन प्रणाली है या मेमोरी प्रेशर का अनुभव करें, तो यह समय के साथ बना सकता है; और logger.isDebugEnabled() कॉल को एक सभ्य जेआईटी द्वारा रेखांकित किया जाएगा यदि एसएलएफ 4 जे इसे एक और दो तर्कों के लिए माहिर करता है, लेकिन अधिक के लिए आपको मिलेगा आधुनिक वर्ल के साथ – AlBlue