java - কেন মুদ্রণ "বি" মুদ্রণ নাটকীয়ভাবে মুদ্রণ চেয়ে "#"?




performance loops (2)

আমি 1000 x 1000 এর দুটি ম্যাট্রিক্স তৈরি করেছি:

প্রথম ম্যাট্রিক্স: O#
দ্বিতীয় ম্যাট্রিক্স: ও B

নিম্নলিখিত কোডটি ব্যবহার করে, প্রথম ম্যাট্রিক্সটি সম্পন্ন করতে 8.5২ সেকেন্ড সময় নেয়:

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("");
 }

এই কোড দিয়ে, দ্বিতীয় ম্যাট্রিক্সটি সম্পন্ন করতে ২5.11২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("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 চেষ্টা করেছি , এবং কোডের উভয় টুকরা একই গতিতে চালানো হয়।

পরীক্ষা শর্ত:

  • আমি Netbans 7.2 থেকে এই পরীক্ষা চালানো, তার কনসোল আউটপুট সঙ্গে
  • আমি পরিমাপ জন্য System.nanoTime() ব্যবহার

আমি জ্যাকেট সংস্করণ 1.8 সঙ্গে উভয় Netbeans 8.0.2 বনাম Eclipse উপর পরীক্ষা সঞ্চালিত; আমি পরিমাপ জন্য System.nanoTime() ব্যবহার।

Eclipse:

আমি উভয় ক্ষেত্রে একই সময় পেয়েছিলাম - প্রায় 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. Eclipse পুরোপুরি কাজ করে "বি"
  2. Netbeans একটি লাইন-মোড়ানো সমস্যা আছে যা সমাধান করা যেতে পারে (কারণ সমস্যাটি গ্রহনযোগ্য হয় না) (বি ("B") পরে স্থান যুক্ত না করে)।

বিশুদ্ধ ধারণা হল যে আপনি এমন একটি টার্মিনাল ব্যবহার করছেন যা চরিত্র-মোড়কে বদলে word-wrapping করার প্রচেষ্টা করে এবং একটি শব্দ চরিত্র হিসাবে কিন্তু # একটি অ-শব্দ চরিত্র হিসাবে আচরণ করে। তাই যখন এটি একটি লাইনের শেষে পৌঁছায় এবং লাইন ভাঙ্গার জন্য একটি জায়গা অনুসন্ধান করে, তখন এটি প্রায় # অবিলম্বে এবং আনন্দের সাথে সেখানে ভাঙ্গে; যখন B দিয়ে এটি দীর্ঘতর অনুসন্ধান রাখতে থাকে এবং তার কাছে মোড়ানো আরও পাঠ্য থাকতে পারে (যা কিছু টার্মিনালগুলিতে ব্যয়বহুল হতে পারে, উদাহরণস্বরূপ, ব্যাকস্পেসগুলিকে আউটপুট করা, তারপরে স্পেসগুলি আউটপুট করা যাতে আবৃত হওয়া অক্ষরগুলি ওভাররাইট করতে পারে)।

কিন্তু যে বিশুদ্ধ ফটকা।





system.out