2012-11-19 29 views
9

मैं दस्तावेज़ पढ़ना चाहता हूं और उन्हें संसाधित करना चाहता हूं। प्रत्येक पुनरावृत्ति एक दस्तावेज़ को संसाधित करता है।उदाहरण और पुनरावृत्तियों। इनमे से कौन बेहतर है?

किस तरह का कोड बेहतर है?

1.

BufferedReader br; 
for(File f : files) 
{ 
    br = new BufferedReader(......); 
    ...... 
} 

2.

for(File f : files) 
{ 
    BufferedReader br = new BufferedReader(......); 
    ...... 
} 

मेरे बिंदु जो एक अंतरिक्ष और गति के मामले में और अधिक कुशल है?

+1

@FedericoCristina हैडर अद्यतन (y) –

उत्तर

3

यदि आप br अन्य जगहों का उपयोग नहीं करते हैं, तो वे दोनों बिल्कुल वही हैं।

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

11

उत्तरार्द्ध मेरे विचार में स्पष्ट है। आम तौर पर, छोटे चर के साथ स्थानीय चर घोषित करना पसंद करते हैं, आदर्श रूप से उन्हें घोषणा के बिंदु पर प्रारंभ करना।

यह सीधे प्रदर्शन को प्रभावित नहीं करेगा - लेकिन यह पठनीयता और रखरखाव, जो कितनी आसानी से आप परिवर्तन जो होगा प्रदर्शन को प्रभावित कर सकते हैं प्रभावित करेगा को प्रभावित करेगा।

सामान्य में:

  • कार्य अपने प्रदर्शन को और व्यवहार आवश्यकताओं (और कैसे आप दोनों का परीक्षण करेंगे)
  • सरल, साफ कोड है जो व्यवहार को प्राप्त होता लिखें आप चाहता हूँ
  • देखें यदि यह आपकी प्रदर्शन आवश्यकताओं को पूरा करता है
  • यदि नहीं, समस्या का विश्लेषण करें, और चीजों को बेहतर बनाने के लिए "कम से कम अशुद्ध" परिवर्तन करें। (इसका मतलब माइक्रो-ऑप्टिमाइज़ेशन के बजाय डिज़ाइन परिवर्तन करना हो सकता है।)
  • इसके बावजूद दोहराएं, कुल्लाएं, तब तक दोहराएं जब तक आपको कोड प्राप्त न हो जो आपकी प्रदर्शन आवश्यकताओं को पूरा करता है और जितना हो सके उतना साफ हो सकता है।
+0

इस उत्तर मुद्रण और मेरे कक्ष में यह फांसी है। –

5
  1. वे बिल्कुल एक जैसे हैं और सभी मतभेदों को बाईटकोड में संकलन के बाद खो जाते हैं।
  2. भले ही हम सबसे खराब संभावित परिदृश्य की कल्पना करें, जो सैद्धांतिक रूप से (किसी अन्य जावा में) एक अतिरिक्त स्मृति लिखने की राशि हो सकती है, अंतर इतना हास्यास्पद रूप से छोटा होगा कि आपको इसे मापने के लिए दुनिया की सबसे सटीक परमाणु घड़ी की आवश्यकता होगी।
  3. आपके लिए वास्तविक अंतर आपके कोड की समग्र रखरखाव के साथ झूठ बोलना चाहिए और यह 2-3% से कम गति में वास्तविक अंतर की तुलना में बहुत अधिक चिंता होनी चाहिए। उदाहरण के लिए, कई डिज़ाइन पैटर्न कुछ प्रकार के ओवरहेड पेश करते हैं, लेकिन लोगों को उस कोड का आधार देने के लिए लचीलापन की मात्रा के लिए भुगतान करने के इच्छुक हैं।

कोड अनुकूलन में यह जीत छोटे के जाल में गिर करने के लिए, कम बिग बहुत आसान है: प्रत्येक व्यक्ति विधि पूर्णता के लिए अनुकूलित किया जा सकता है, लेकिन समग्र प्रणाली प्रदर्शन अभी भी की अपर्याप्तता के कारण एक आपदा हो सकता है वैश्विक वास्तुकला। किसी को हमेशा शीर्ष-डाउन को अनुकूलित करना होगा, और ऐसा करने पर, आप देखेंगे कि अनुकूलित संस्करण द्वारा प्रतिस्थापित किए जाने पर कोड की केवल 1% या उससे कम पंक्तियां वास्तव में समग्र प्रदर्शन में योगदान दे सकती हैं।

+0

यदि मैं सही ढंग से याद करता हूं, 1) गलत है: दूसरे उदाहरण में लूप समाप्त होने के बाद 'br' को परिभाषित नहीं किया गया है, एक बार यह उस दायरे को छोड़ देता है जहां इसे परिभाषित किया गया था। यह रखरखाव को आसान बनाता है, क्योंकि आप गलती से चर का पुन: उपयोग नहीं कर सकते हैं। – Izkata

+0

@izkata 1) रखरखाव में अंतर के बारे में नहीं है, लेकिन रनटाइम दक्षता में है। कंपाइलर आसानी से पता लगाता है कि 'br' का उपयोग' for' लूप के साथ समाप्त होता है और इसे इस तरह से व्यवहार करता है जैसे कि इसे अंदर घोषित किया गया था। –

0

क्षमता-वार दोनों समान हैं, अधिकांश समय समान बाइट कोडों के लिए संकलित होते हैं।

पठनीयता-वार दूसरा दृष्टिकोण बेहतर है। आम तौर पर, कोड बढ़ने पर यह बहुत मदद करता है। विशेष रूप से डिबगिंग करते समय आपको उस चर के बाहर उस चर के बाद संशोधित होने की चिंता करने की ज़रूरत नहीं है।

1

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

अन्यथा वे वही हैं। हालांकि दूसरे मामले अधिक पठनीय

0

3.

for(File f : files) 
{ 
    try(BufferedReader br = new BufferedReader(......)) 
    { 
     ...... 
    } 
}