[java] प्रिंटिंग "बी" प्रिंटिंग की तुलना में नाटकीय रूप से धीमी क्यों है?



0 Answers

मैंने एक्सेलिप बनाम नेटबीन्स 8.0.2 पर परीक्षण किया, दोनों जावा संस्करण 1.8 के साथ; मैंने माप के लिए System.nanoTime() उपयोग किया।

ग्रहण:

मुझे दोनों मामलों में एक ही समय मिला - लगभग 1.564 सेकंड

NetBeans:

  • "#" का प्रयोग करना: 1.536 सेकेंड
  • "बी" का प्रयोग: 44.164 सेकेंड

तो, ऐसा लगता है कि नेटबीन के प्रिंट पर कंसोल पर खराब प्रदर्शन है।

अधिक शोध के बाद मुझे एहसास हुआ कि समस्या Netbeans के अधिकतम बफर की line-wrapping है (यह System.out.println कमांड तक सीमित नहीं है), इस कोड द्वारा प्रदर्शित:

for (int i = 0; i < 1000; i++) {
    long t1 = System.nanoTime();
    System.out.print("BBB......BBB"); \\<-contain 1000 "B"
    long t2 = System.nanoTime();
    System.out.println(t2-t1);
    System.out.println("");
}

प्रत्येक परिणाम पांचवें पुनरावृत्ति को छोड़कर, प्रत्येक परिणाम के बाद 1 मिलीसेकंड प्रत्येक पुनरावृत्ति कम होता है, जब समय का परिणाम लगभग 225 मिलीसेकंड होता है। कुछ ऐसा (नैनोसेकंड में):

BBB...31744
BBB...31744
BBB...31744
BBB...31744
BBB...226365807
BBB...31744
BBB...31744
BBB...31744
BBB...31744
BBB...226365807
.
.
.

और इसी तरह..

सारांश:

  1. ग्रहण पूरी तरह से "बी" के साथ काम करता है
  2. नेटबीन्स में एक लाइन-रैपिंग समस्या होती है जिसे हल किया जा सकता है (क्योंकि समस्या ग्रहण में नहीं होती है) (बी ("बी") के बाद स्थान जोड़ने के बिना)।
Question

मैंने 1000 x 1000 दो मैट्रिक्स उत्पन्न किए:

पहला मैट्रिक्स: O और #
दूसरा मैट्रिक्स: O और B

निम्नलिखित कोड का उपयोग करके, पहले मैट्रिक्स को पूरा करने के लिए 8.52 सेकंड लग गए:

Random r = new Random();
for (int i = 0; i < 1000; i++) {
    for (int j = 0; j < 1000; j++) {
        if(r.nextInt(4) == 0) {
            System.out.print("O");
        } else {
            System.out.print("#");
        }
    }

   System.out.println("");
 }

इस कोड के साथ, दूसरे मैट्रिक्स को पूरा करने के लिए 25 9 .152 सेकंड लग गए:

Random r = new Random();
for (int i = 0; i < 1000; i++) {
    for (int j = 0; j < 1000; j++) {
        if(r.nextInt(4) == 0) {
            System.out.print("O");
        } else {
            System.out.print("B"); //only line changed
        }
    }

    System.out.println("");
}

नाटकीय रूप से अलग रन समय के पीछे क्या कारण है?

टिप्पणियों में सुझाव दिया गया है, केवल System.out.print("#"); प्रिंटिंग System.out.print("#"); 7.8871 सेकंड लेता है, जबकि System.out.print("B"); still printing... देता है still printing...

जैसा कि अन्य ने इंगित किया कि यह सामान्य रूप से उनके लिए काम करता है, उदाहरण के लिए मैंने Ideone.com को आजमाया, और कोड के दोनों टुकड़े एक ही गति से निष्पादित होते हैं।

परीक्षण की स्थितियाँ:

  • मैंने नेटबैंस 7.2 से इस परीक्षण को अपने कंसोल में आउटपुट के साथ चलाया
  • मैंने माप के लिए System.nanoTime() उपयोग किया



Related