এটি কেন অক্ষম তা আপনার ব্যাখ্যা সঠিক, কমপক্ষে আমি (সি, জাভা, সি #) যে ভাষাগুলির সাথে পরিচিত সেগুলিতে, যদিও আমি একমত নই যে বিশাল পরিমাণে স্ট্রিং কনটেন্টেশন করা সর্বজনীনভাবে সাধারণ। সি # কোড আমি এ কাজ করে, সেখানে প্রচুর ব্যবহার হয় StringBuilder
, String.Format
ইত্যাদি যা সব স্মৃতি techiniques সংরক্ষণ ওভার পদ্ধতিতে পুনরায় বরাদ্দকরণের এড়াতে হয়।
সুতরাং আপনার প্রশ্নের উত্তর পেতে আমাদের অবশ্যই অন্য একটি প্রশ্ন জিজ্ঞাসা করতে হবে: যদি এটি সত্যই সত্যই স্ট্রিংগুলিকে আঁকানোর কোনও সমস্যা না হয় তবে শ্রেণিগুলি কেন পছন্দ করবে StringBuilder
এবং StringBuffer
বিদ্যমান থাকবে ? কেন এই জাতীয় ক্লাস ব্যবহার এমনকি এমনকি অর্ধ-শিক্ষানবিশ প্রোগ্রামিং বই এবং ক্লাসের অন্তর্ভুক্ত? আপাতদৃষ্টিতে প্রাক-পরিপক্ক অপ্টিমাইজেশনের পরামর্শটি এত বিশিষ্ট হবে কেন?
যদি বেশিরভাগ স্ট্রিং-কনটেনেটিং ডেভেলপাররা তাদের উত্তরকে নির্ভুলভাবে অভিজ্ঞতার ভিত্তিতে রাখে তবে বেশিরভাগ বলে যে এটি কখনও কোনও পার্থক্য করে না এবং "আরও পঠনযোগ্য" এর পক্ষে এই জাতীয় সরঞ্জামগুলি ব্যবহার থেকে বিরত থাকবে for (int i=0; i<1000; i++) { strA += strB; }
। তবে তারা কখনই এটি মাপেনি।
এই প্রশ্নের আসল উত্তরটি এই এসও উত্তরে পাওয়া যাবে , যা প্রকাশ করে যে এক উদাহরণে, 50,000 স্ট্রিংগুলি (যা আপনার প্রয়োগের উপর নির্ভর করে, একটি সাধারণ ঘটনা হতে পারে) এমনকি ছোটগুলিও যখন 1000x পারফরম্যান্স হিট করে ।
যদি পারফরম্যান্সটির আক্ষরিক অর্থে কোনও অর্থ হয় না, তবে সমস্ত উপায়ে একত্র হয়ে যান। তবে আমি একমত নই যে বিকল্পগুলি (স্ট্রিংবিল্ডার) ব্যবহার করা কঠিন বা কম পঠনযোগ্য এবং তাই একটি যুক্তিসঙ্গত প্রোগ্রামিং অনুশীলন হবে যা "অকাল অপ্টিমাইজেশন" প্রতিরক্ষা প্রার্থনা করা উচিত নয়।
হালনাগাদ:
আমি মনে করি এটি কী নেমে আসে, তা আপনার প্ল্যাটফর্মটি জানেন এবং এর সেরা অনুশীলনগুলি অনুসরণ করুন, যা দুঃখের সাথে সার্বজনীন নয় । দুটি ভিন্ন "আধুনিক ভাষা" থেকে দুটি উদাহরণ:
- ইন আরেকটি এইরকম উত্তর দেন , সঠিক বিপরীত কর্মক্ষমতা বৈশিষ্ট্য (array.join বনাম + + =) হতে খুঁজে পাওয়া যায়নি কখনও কখনও সত্য জাভাস্ক্রিপ্ট । কিছু ব্রাউজারগুলিতে স্ট্রিং কনটেনটেশন স্বয়ংক্রিয়ভাবে অনুকূলিত হয় এবং অন্যান্য ক্ষেত্রে এটি হয় না। সুতরাং প্রস্তাবনাটি (কমপক্ষে এই SO প্রশ্নের মধ্যে), কেবলমাত্র মনোনিবেশ করা এবং এটি নিয়ে চিন্তা না করা।
- অন্য ক্ষেত্রে, একটি জাভা সংকলক স্ট্রিংবিল্ডারের মতো আরও দক্ষ নির্মাণের সাথে স্বয়ংক্রিয়ভাবে কনটেনটেশন প্রতিস্থাপন করতে পারে । তবে অন্যরা যেমন উল্লেখ করেছে, এটি নিরপেক্ষবাদী, গ্যারান্টিযুক্ত নয় এবং স্ট্রিংবিল্ডার ব্যবহারের ফলে পাঠ্যতা ক্ষতিগ্রস্থ হয় না। এই বিশেষ ক্ষেত্রে, আমি বড় সংগ্রহের জন্য কনটেন্টেশন ব্যবহারের বিরুদ্ধে বা একটি নির্বিচারবাদী জাভা সংকলক আচরণের উপর নির্ভর করার সুপারিশ করব। একইভাবে। নেট এ, কখনও বাছাইয়ের কোনও অপ্টিমাইজেশন সম্পন্ন হয় না ।
এখনই প্রতিটি প্ল্যাটফর্মের প্রতিটি সূক্ষ্মতা না জানা একেবারে বড় পাপ নয়, তবে এই জাতীয় গুরুত্বপূর্ণ প্ল্যাটফর্মের বিষয়গুলি উপেক্ষা করা জাভা থেকে সি ++ এ যাওয়া এবং স্মৃতিশক্তি হ্রাস করার বিষয়ে যত্নশীল না হওয়ার মতোই হবে।