একসাথে স্ট্রিংগুলি একত্রীকরণে এটি কি অক্ষম?


11

আমি সি তে আমার প্রোগ্রামিংয়ের দিনগুলি থেকে ফিরে স্মরণ করি যে যখন দুটি স্ট্রিং যুক্ত হয়ে যায় তখন ওএসকে অবশ্যই যুক্ত স্ট্রিংয়ের জন্য মেমরি বরাদ্দ করতে হবে, তারপরে প্রোগ্রামটি সমস্ত স্ট্রিং পাঠ্যকে মেমরির নতুন অংশে অনুলিপি করতে পারে, তারপরে পুরানো স্মৃতি ম্যানুয়ালি করতে হবে মুক্তি পাত্তয়া. সুতরাং যদি কোনও তালিকায় যোগদানের ক্ষেত্রে এটি একাধিকবার করা হয় তবে ওএসকে ক্রমাগত আরও বেশি বেশি মেমরি বরাদ্দ করতে হয়, কেবল পরবর্তী যুক্তির পরে এটি প্রকাশ করতে হবে। সি তে এটি করার একটি আরও ভাল উপায় হ'ল সংযুক্ত স্ট্রিংগুলির মোট আকার নির্ধারণ করা এবং স্ট্রিংয়ের সম্পূর্ণ যোগদানের তালিকার জন্য প্রয়োজনীয় মেমরি বরাদ্দ করা।

এখন আধুনিক প্রোগ্রামিং ল্যাঙ্গুয়েজে (উদাহরণস্বরূপ C #), আমি সাধারণত সংগ্রহের পুনরাবৃত্তির মাধ্যমে সংগ্রহগুলির সামগ্রীগুলি একসাথে যুক্ত হয়ে দেখি এবং একবারে একটি করে সমস্ত স্ট্রিং যুক্ত করে একটি স্ট্রিং রেফারেন্সে যোগ করি। আধুনিক কম্পিউটারের শক্তি দিয়েও কী এটি অদক্ষ নয়?


এটি সংকলক এবং প্রোফাইলার এ ছেড়ে দিন, তারা এটি সম্পর্কে যত্নশীল হবে, আপনার সময়কে স্ট্রিং কনটেন্টেশন করার চেয়ে অনেক বেশি ব্যয়বহুল।
ওজেড_

7
বাস্তবায়নের উপর নির্ভর করে - আপনার নির্দিষ্ট স্ট্রিং লাইব্রেরির জন্য ডকুমেন্টেশনটি সত্যই আপনার পরীক্ষা করা উচিত। ও (1) সময়ে, রেফারেন্সের দ্বারা মিলিত স্ট্রিংগুলি প্রয়োগ করা সম্ভব। যাইহোক, আপনার যদি স্ট্রিংয়ের স্বেচ্ছাসেবী-দীর্ঘ তালিকাটি জড়িত করা প্রয়োজন, আপনার ক্লাস বা ফাংশনগুলি ব্যবহার করা উচিত যা এই ধরণের জিনিসটির জন্য ডিজাইন করা হয়েছে।
আসন্ন ঝড়

নোট করুন যে স্ট্রিং কনটেনটেশনের মতো জিনিসগুলি সাধারণত অপারেটিং সিস্টেম নয়, একটি লাইব্রেরি ফাংশন দ্বারা পরিচালিত হয়। ওএস মেমরি বরাদ্দের সাথে জড়িত হতে পারে, তবে সম্ভবত স্ট্রিংয়ের মতো অপেক্ষাকৃত ছোট বস্তুর জন্য নয়।
কালেব

@ কালেব ওএস সমস্ত মেমরি বরাদ্দের সাথে জড়িত। এই নিয়মটি অনুসরণ করতে ব্যর্থ হওয়া এক ধরণের মেমরি ফাঁস। ব্যতিক্রমটি হ'ল অ্যাপ্লিকেশনটিতে আপনার হার্ড-কোডেড স্ট্রিংগুলি থাকে; যারা উত্পন্ন সমাবেশের মধ্যে বাইনারি ডেটা হিসাবে লেখা হয়। তবে যত তাড়াতাড়ি আপনি একটি স্ট্রিং ম্যানিপুলেট করবেন (বা সম্ভবত এমনকি নির্ধারণও করবেন) এটি মেমরির মধ্যে সঞ্চয় করা দরকার (যা স্মৃতি বরাদ্দ করতে হবে)।
জেসিরিস

4
@ বিজার্ক একটি সাধারণ দৃশ্যে, মেলোকের মতো মেমোরি বরাদ্দকারী () যা সি স্ট্যান্ডার্ড লাইব্রেরির অংশ, না ওএস) মেমরির বিভিন্ন অংশকে ইতিমধ্যে ওএস দ্বারা প্রক্রিয়াতে বরাদ্দ করার জন্য ব্যবহৃত হয়। প্রক্রিয়াটি স্মৃতিতে কম না চলে এবং আরও অনুরোধ করার প্রয়োজন না থাকলে ওএসকে জড়িত হওয়ার দরকার নেই। যদি কোনও বরাদ্দ কোনও পৃষ্ঠা ত্রুটির কারণ হয়ে থাকে তবে এটি নিম্ন স্তরেও অংশ নিতে পারে। সুতরাং হ্যাঁ, ওএস শেষ পর্যন্ত মেমরি সরবরাহ করে তবে এটি প্রক্রিয়াটির মধ্যে স্ট্রিং এবং অন্যান্য বস্তুর টুকরা মেশিনে জড়িত নয়।
কালেব

উত্তর:


21

এটি কেন অক্ষম তা আপনার ব্যাখ্যা সঠিক, কমপক্ষে আমি (সি, জাভা, সি #) যে ভাষাগুলির সাথে পরিচিত সেগুলিতে, যদিও আমি একমত নই যে বিশাল পরিমাণে স্ট্রিং কনটেন্টেশন করা সর্বজনীনভাবে সাধারণ। সি # কোড আমি এ কাজ করে, সেখানে প্রচুর ব্যবহার হয় StringBuilder, String.Formatইত্যাদি যা সব স্মৃতি techiniques সংরক্ষণ ওভার পদ্ধতিতে পুনরায় বরাদ্দকরণের এড়াতে হয়।

সুতরাং আপনার প্রশ্নের উত্তর পেতে আমাদের অবশ্যই অন্য একটি প্রশ্ন জিজ্ঞাসা করতে হবে: যদি এটি সত্যই সত্যই স্ট্রিংগুলিকে আঁকানোর কোনও সমস্যা না হয় তবে শ্রেণিগুলি কেন পছন্দ করবে StringBuilderএবং StringBufferবিদ্যমান থাকবে ? কেন এই জাতীয় ক্লাস ব্যবহার এমনকি এমনকি অর্ধ-শিক্ষানবিশ প্রোগ্রামিং বই এবং ক্লাসের অন্তর্ভুক্ত? আপাতদৃষ্টিতে প্রাক-পরিপক্ক অপ্টিমাইজেশনের পরামর্শটি এত বিশিষ্ট হবে কেন?

যদি বেশিরভাগ স্ট্রিং-কনটেনেটিং ডেভেলপাররা তাদের উত্তরকে নির্ভুলভাবে অভিজ্ঞতার ভিত্তিতে রাখে তবে বেশিরভাগ বলে যে এটি কখনও কোনও পার্থক্য করে না এবং "আরও পঠনযোগ্য" এর পক্ষে এই জাতীয় সরঞ্জামগুলি ব্যবহার থেকে বিরত থাকবে for (int i=0; i<1000; i++) { strA += strB; }তবে তারা কখনই এটি মাপেনি।

এই প্রশ্নের আসল উত্তরটি এই এসও উত্তরে পাওয়া যাবে , যা প্রকাশ করে যে এক উদাহরণে, 50,000 স্ট্রিংগুলি (যা আপনার প্রয়োগের উপর নির্ভর করে, একটি সাধারণ ঘটনা হতে পারে) এমনকি ছোটগুলিও যখন 1000x পারফরম্যান্স হিট করে

যদি পারফরম্যান্সটির আক্ষরিক অর্থে কোনও অর্থ হয় না, তবে সমস্ত উপায়ে একত্র হয়ে যান। তবে আমি একমত নই যে বিকল্পগুলি (স্ট্রিংবিল্ডার) ব্যবহার করা কঠিন বা কম পঠনযোগ্য এবং তাই একটি যুক্তিসঙ্গত প্রোগ্রামিং অনুশীলন হবে যা "অকাল অপ্টিমাইজেশন" প্রতিরক্ষা প্রার্থনা করা উচিত নয়।

হালনাগাদ:

আমি মনে করি এটি কী নেমে আসে, তা আপনার প্ল্যাটফর্মটি জানেন এবং এর সেরা অনুশীলনগুলি অনুসরণ করুন, যা দুঃখের সাথে সার্বজনীন নয় । দুটি ভিন্ন "আধুনিক ভাষা" থেকে দুটি উদাহরণ:

  1. ইন আরেকটি এইরকম উত্তর দেন , সঠিক বিপরীত কর্মক্ষমতা বৈশিষ্ট্য (array.join বনাম + + =) হতে খুঁজে পাওয়া যায়নি কখনও কখনও সত্য জাভাস্ক্রিপ্ট । কিছু ব্রাউজারগুলিতে স্ট্রিং কনটেনটেশন স্বয়ংক্রিয়ভাবে অনুকূলিত হয় এবং অন্যান্য ক্ষেত্রে এটি হয় না। সুতরাং প্রস্তাবনাটি (কমপক্ষে এই SO প্রশ্নের মধ্যে), কেবলমাত্র মনোনিবেশ করা এবং এটি নিয়ে চিন্তা না করা।
  2. অন্য ক্ষেত্রে, একটি জাভা সংকলক স্ট্রিংবিল্ডারের মতো আরও দক্ষ নির্মাণের সাথে স্বয়ংক্রিয়ভাবে কনটেনটেশন প্রতিস্থাপন করতে পারে । তবে অন্যরা যেমন উল্লেখ করেছে, এটি নিরপেক্ষবাদী, গ্যারান্টিযুক্ত নয় এবং স্ট্রিংবিল্ডার ব্যবহারের ফলে পাঠ্যতা ক্ষতিগ্রস্থ হয় না। এই বিশেষ ক্ষেত্রে, আমি বড় সংগ্রহের জন্য কনটেন্টেশন ব্যবহারের বিরুদ্ধে বা একটি নির্বিচারবাদী জাভা সংকলক আচরণের উপর নির্ভর করার সুপারিশ করব। একইভাবে। নেট এ, কখনও বাছাইয়ের কোনও অপ্টিমাইজেশন সম্পন্ন হয় না

এখনই প্রতিটি প্ল্যাটফর্মের প্রতিটি সূক্ষ্মতা না জানা একেবারে বড় পাপ নয়, তবে এই জাতীয় গুরুত্বপূর্ণ প্ল্যাটফর্মের বিষয়গুলি উপেক্ষা করা জাভা থেকে সি ++ এ যাওয়া এবং স্মৃতিশক্তি হ্রাস করার বিষয়ে যত্নশীল না হওয়ার মতোই হবে।


-1: প্রধান বিএস রয়েছে। strA + strBহয় ঠিক একটি StringBuilder ব্যবহার হিসাবে একই। এটিতে 1x পারফরম্যান্স হিট রয়েছে। বা 0x, আপনি কীভাবে পরিমাপ করছেন তার উপর নির্ভর করে। আরও বিশদের জন্য কোডিংহরর.com
আমারা

5
@ স্পার্কলেশি: আমার ধারণা এসও উত্তরটি জাভা ব্যবহার করে এবং আপনার লিঙ্ক করা নিবন্ধটি সি # ব্যবহার করে। যারা "প্রয়োগের উপর নির্ভর করে" এবং "আপনার নির্দিষ্ট পরিবেশের জন্য এটি পরিমাপ করেন" তাদের সাথে আমি সম্মত
কাই চ্যান

1
@ কাইচান: স্ট্রিং কনটেন্টেশন মূলত জাভা এবং সিতে একই রকম
আমারা

3
@ স্পার্কলেশি - পয়েন্ট তোলা হয়েছে, তবে স্ট্রিংবিল্ডার, স্ট্রিং.জয়িন ইত্যাদি ব্যবহার করে ঠিক দুটি স্ট্রিং সংমিশ্রিত করা খুব কমই সুপারিশ হয়। তদুপরি, ওপির প্রশ্নটি বিশেষত " সংগ্রহের বিষয়বস্তুগুলি একসাথে যোগদানের জন্য" সম্পর্কিত, যা এটি নয় (যেখানে স্ট্রিংবিল্ডার ইত্যাদি প্রযোজ্য)। নির্বিশেষে, আমি আমার উদাহরণটি আরও বেশি উল্লেখ করার জন্য আপডেট করব।
কেভিন ম্যাককর্মিক

3
আমি এই প্রশ্নের প্রয়োজনে ভাষা সম্পর্কে চিন্তা করি না। কিছু ভাষায় পর্দার আড়ালে স্ট্রিংবিল্ডারের ব্যবহার ব্যাখ্যা করে যে কেন স্ট্রিংগুলির একটি সম্পূর্ণ তালিকা সংঘবদ্ধ করা অদক্ষ হতে পারে না, যা আমার প্রশ্নের উত্তর দেয়। এই উত্তরটি অবশ্য ব্যাখ্যা করেছে যে একটি তালিকায় যোগ দেওয়া সম্ভাব্য ঝুঁকিপূর্ণ হতে পারে এবং বিকল্প হিসাবে স্ট্রিংবিল্ডারের প্রস্তাব দেওয়া হয়েছিল। সম্ভাব্য খ্যাতি ক্ষতি বা ভুল ব্যাখ্যা থেকে বাঁচতে আমি আপনার উত্তরের দৃশ্যের পিছনে স্ট্রিংবিল্ডারের সংকলকটির ব্যবহার যুক্ত করার পরামর্শ দিচ্ছি।
জেসিদারিস

2

মোটামুটি আপনি যে কারণে বর্ণনা করেছেন এটি কার্যকর নয়। সি # এবং জাভাতে স্ট্রিংগুলি অপরিবর্তনীয়। স্ট্রিংগুলির ক্রিয়াকলাপগুলি সিটির মতো ছিল না, মূলটি পরিবর্তনের পরিবর্তে পৃথক উদাহরণ দেয় multiple বরাদ্দকরণ এবং পরে আবর্জনা সংগ্রহ করা এই অব্যবহৃত দৃষ্টান্তগুলি পারফরম্যান্স হিট করতে পারে। কেবলমাত্র এই সময় মেমরি পরিচালনা আপনার পক্ষে আবর্জনা সংগ্রহকারী দ্বারা পরিচালনা করা হয়।

সি # এবং জাভা উভয়ই এই ধরণের কাজের জন্য বিশেষত একটি পরিবর্তনীয় স্ট্রিং হিসাবে একটি স্ট্রিংবিল্ডার শ্রেণি প্রবর্তন করে। সি এর সমতুল্য একটি অ্যারেতে যোগ দেওয়ার পরিবর্তে সংক্ষিপ্ত স্ট্রিংগুলির একটি লিঙ্কযুক্ত তালিকা ব্যবহার করবে। সি # স্ট্রিংয়ের সংগ্রহে যোগদানের জন্য স্ট্রিংগুলিতে সুবিধাজনক জোড় পদ্ধতি সরবরাহ করে।


1

কড়া কথা বলতে গেলে এটি সিপিইউ চক্রের কম দক্ষ ব্যবহার নয়, তাই আপনি সঠিক। তবে বিকাশকারী সময়, রক্ষণাবেক্ষণের ব্যয় ইত্যাদির বিষয়ে কী আপনি যদি সমীকরণের সাথে সময় ব্যয় যোগ করেন তবে সহজ কাজটি করা প্রায় সবসময়ই বেশি দক্ষ, তারপরে প্রয়োজনে প্রোফাইল এবং ধীর বিটগুলি অনুকূল করে নিন।
"প্রোগ্রাম অপ্টিমাইজেশনের প্রথম বিধি: এটি করবেন না Program প্রোগ্রাম অপ্টিমাইজেশনের দ্বিতীয় বিধি (কেবল বিশেষজ্ঞদের জন্য!): এটি এখনও করবেন না।"


3
খুব কার্যকর নিয়ম নয়, আমি মনে করি।
ওজেড_

@ ওজেড_: এটি একটি বহুল ব্যবহৃত উক্তি (মাইকেল এ। জ্যাকসন) এবং ডোনাল্ড নুথের পছন্দ অনুসারে অন্যটি ... তবে এটির একটি রয়েছে, যা আমি সাধারণত ব্যবহার করা থেকে বিরত থাকি "দক্ষতার নামে আরও বেশি গণনা করা পাপ করা হয় ( অনাবাদী বোকামি সহ অন্য কোনও একক কারণে - অগত্যা এটি অর্জন ছাড়াই)।
mattnz

2
আমি বাইরে নির্দেশ করা উচিত যে মাইকেল উ: জ্যাকসন একটি ব্রিট, তাই এটি ছিলো অপ্টিমাইজেশান না অপ্টিমাইজেশান । কিছু সময়ে আমার উইকিপিডিয়া পৃষ্ঠাটি সংশোধন করা উচিত । * 8 ')
মার্ক বুথ

আমি পুরোপুরি একমত, আপনার এই বানান ত্রুটিগুলি সংশোধন করা উচিত। যদিও আমার মাতৃভাষা কুইন্স ইংরাজী, তবুও আমি ইন্ট্রা-ওয়েবে মার্কিন যুক্তরাষ্ট্রে কথা বলতে সহজ মনে করি .......
mattnz

কেউ ব্যবহারকারীর কথা ভাবেনা। আপনি বিকাশকারী তৈরি করতে এটি কিছুটা দ্রুত তৈরি করতে পারেন, তবে তারপরে আপনার গ্রাহকরা প্রত্যেকেই এর জন্য ক্ষতিগ্রস্থ হন। আপনার কোড তাদের জন্য লিখুন, আপনার জন্য নয়।
gbjbaanb

1

ব্যবহারিক পরীক্ষা ছাড়াই পারফরম্যান্স সম্পর্কে কিছু বলা খুব শক্ত। সম্প্রতি আমি এটি জানতে পেরে খুব অবাক হয়েছি যে জাভাস্ক্রিপ্টে একটি নিষ্প্রভ স্ট্রিং কনটেন্টেশন সাধারণত প্রস্তাবিত "মেক লিস্ট এবং জয়েন" সমাধানের চেয়ে দ্রুত ছিল ( এখানে পরীক্ষা করুন , টি 1 টি টি-এর সাথে তুলনা করুন)। কেন এমন হয় তা নিয়ে আমি এখনও হতবাক।

পারফরম্যান্স সম্পর্কে বিতর্ক করার সময় আপনি কিছু প্রশ্ন জিজ্ঞাসা করতে পারেন (বিশেষত মেমরির ব্যবহার সম্পর্কে): 1) আমার ইনপুটটি কত বড়? 2) আমার সংকলকটি কতটা স্মার্ট? 3) কীভাবে আমার রানটাইম মেমরি পরিচালনা করে? এটি পরিপূর্ণ নয়, তবে এটি একটি সূচনা পয়েন্ট।

  1. আমার ইনপুট কত বড়?

    একটি জটিল সমাধানের প্রায়শই একটি স্থির ওভারহেড থাকে, সম্ভবত অতিরিক্ত ক্রিয়াকলাপ সম্পাদনের জন্য, বা অতিরিক্ত মেমরির প্রয়োজন হতে পারে। যেহেতু এই সমাধানগুলি বড় কেসগুলি পরিচালনা করার জন্য ডিজাইন করা হয়েছে, বাস্তবায়নকারীদের সাধারণত সেই অতিরিক্ত ব্যয় উপস্থাপনে কোনও সমস্যা হবে না, যেহেতু নেট লাভটি কোডটিকে মাইক্রো-অনুকূলকরণের পক্ষে আরও গুরুত্বপূর্ণ। সুতরাং, যদি আপনার ইনপুট পর্যাপ্ত পরিমাণে ছোট হয় তবে একটি নির্লজ্জ দ্রষ্টব্য জটিলটির তুলনায় আরও ভাল পারফরম্যান্স করতে পারে, যদি কেবলমাত্র এই ওভারহেড এড়ানো হয়। ("যথেষ্ট ছোট" কী তা নির্ধারণ করা শক্ত অংশ যদিও)

  2. আমার সংকলকটি কত স্মার্ট?

    অনেক সংকলক লেখকগুলিকে "অপ্টিমাইজ করা দূরে" যথেষ্ট স্মার্ট, তবে কখনও পড়েনি। তেমনি, একটি ভাল সংকলক একটি নির্লজ্জ স্ট্রিং কনটেন্টেশনকে একটি (মূল) লাইব্রেরি ব্যবহারে রূপান্তর করতে সক্ষম হতে পারে এবং তাদের মধ্যে অনেকগুলি যদি কোনও পাঠ্য ছাড়াই তৈরি করা হয় তবে সেই ক্রিয়াকলাপগুলির মধ্যে আবার স্ট্রিংতে রূপান্তর করার প্রয়োজন নেই (এমনকি যদি আপনার উত্স কোডটি কেবল এটি করতে পারে বলে মনে হচ্ছে)। আমি জানাতে পারি না যে সেখানে কোনও সংকলকরা তা করে কিনা, বা কী পরিমাণে সম্পন্ন হয়েছে (এএফআইএইসি জাভা কমপক্ষে একই অভিব্যক্তিতে বেশ কয়েকটি কনটকে স্ট্রিংবফার অপারেশনের ক্রম হিসাবে প্রতিস্থাপন করবে) তবে এটি সম্ভাবনা।

  3. আমার রানটাইম কীভাবে মেমরি পরিচালনা করে?

    আধুনিক সিপিইউতে বাধা সাধারণত প্রসেসর নয়, তবে ক্যাশে হয়; যদি আপনার কোড অল্প সময়ের মধ্যে অনেকগুলি "দূরবর্তী" মেমরি ঠিকানাগুলিতে অ্যাক্সেস করে, ক্যাশে স্তরের মধ্যে সমস্ত স্মৃতি সরিয়ে নিতে সময় লাগে তবে ব্যবহৃত নির্দেশাবলীর মধ্যে সবচেয়ে বেশি অপ্টিমাইজেশনকে ছাড়িয়ে যায়। প্রজন্মের আবর্জনা সংগ্রহকারীদের সাথে রানটাইমের ক্ষেত্রে এটি বিশেষ গুরুত্ব বহন করে, যেহেতু সর্বাধিক তৈরি করা ভেরিয়েবল (উদাহরণস্বরূপ একই ফাংশন স্কোপের অভ্যন্তরে) সাধারণত স্বচ্ছ মেমরির ঠিকানাগুলিতে থাকবে। এই রানটাইমগুলিও পদ্ধতিগত কলগুলির মধ্যে নিয়মিত মেমরিটিকে পিছনে এগিয়ে নিয়ে যায়।

    এটি স্ট্রিং কনটেনটেশনকে প্রভাবিত করতে পারে এমন একটি উপায় (দাবি অস্বীকার: এটি একটি বুনো অনুমান, আমি নিশ্চিতভাবে বলতে যথেষ্ট জ্ঞানবান নই) যদি হতভম্বের জন্য মেমরিটি ব্যবহার করা বাকী কোডের কাছাকাছি বরাদ্দ করা হত (এমনকি যদি এটি এটিকে একাধিকবার বরাদ্দ করে এবং প্রকাশ করে), যখন গ্রন্থাগারের অবজেক্টের জন্য মেমরিটি এটিকে থেকে অনেক দূরে বরাদ্দ করা হয়েছিল (সুতরাং আপনার কোড গণনাগুলি, গ্রন্থাগারটি গ্রাস করবে, আপনার কোডের আরও বেশি পরিমাণে গতিবেগ করবে ইত্যাদি অনেকগুলি ক্যাশে মিস করে)। অবশ্যই বড় ইনপুটগুলির জন্য OTOH ক্যাশে মিস করা যাই হোক না কেন ঘটবে, তাই একাধিক বরাদ্দের সমস্যা আরও প্রকট হয়ে ওঠে।

এটি বলেছিল, আমি এই বা সেই পদ্ধতির ব্যবহারের পক্ষে পরামর্শ দিচ্ছি না, কেবল পরীক্ষা-নিরীক্ষা এবং প্রোফাইলিং এবং বেঞ্চমার্কিংয়ের ক্ষেত্রে পারফরম্যান্স সম্পর্কে কোনও তাত্ত্বিক বিশ্লেষণের আগে হওয়া উচিত, যেহেতু আজকাল বেশিরভাগ সিস্টেমই বিষয়টিতে গভীর দক্ষতা ছাড়াই পুরোপুরি বুঝতে খুব জটিল।


হ্যাঁ আমি সম্মত হই যে এটি অবশ্যই এমন একটি অঞ্চল যেখানে একটি সংকলক তাত্ত্বিকভাবে বুঝতে পেরেছিল যে আপনি একসাথে কয়েকটি স্ট্রিং যুক্ত করার চেষ্টা করছেন এবং তারপরে আপনি কোনও স্ট্রিং বিল্ডার ব্যবহার করছেন এমনটি অনুকূল করে তুলছেন। তবে এটি করা খুব কমই একটি তুচ্ছ জিনিস এবং আমি মনে করি না এটি কোনও আধুনিক সংকলকগুলিতে প্রয়োগ করা হয়েছে। আপনি কেবল আমাকে স্নাতক গবেষণা প্রকল্পের জন্য একটি দুর্দান্ত ধারণা দিয়েছেন: ডি।
জেসিদারিস

এই উত্তরটি পরীক্ষা করে দেখুন , জাভা সংকলক ইতিমধ্যে StringBuilderহুডের নীচে ব্যবহার করে, toStringভেরিয়েবলের প্রকৃত প্রয়োজন না হওয়া পর্যন্ত এটির জন্য যা করা দরকার তা করা উচিত নয় । আমি যদি সঠিকভাবে স্মরণ করি তবে এটি একক অভিব্যক্তির জন্যই করে, আমার একমাত্র সন্দেহ হ'ল এটি একই পদ্ধতিতে একাধিক বিবৃতিতে প্রযোজ্য কিনা। আমি নেট নেট অভ্যন্তরীণ সম্পর্কে কিছুই জানি না, তবে আমি বিশ্বাস করি যে একই ধরণের কৌশল সি # সংকলকও নিযুক্ত করতে পারে।
এমজিবিসনব্রব

0

জোয়েল কিছুক্ষণ আগে এই বিষয়ে একটি দুর্দান্ত নিবন্ধ লিখেছিল । অন্য কেউ কেউ যেমন উল্লেখ করেছেন, এটি ভাষার উপর অনেক বেশি নির্ভরশীল। যেভাবে স্ট্রিংগুলি সিতে প্রয়োগ করা হয় (শূন্য সমাপ্ত, কোনও দৈর্ঘ্যের ক্ষেত্র ছাড়াই), মানক স্ট্রাইক্যাট লাইব্রেরি রুটিন অত্যন্ত অযোগ্য। জোল কেবলমাত্র একটি সামান্য পরিবর্তন সহ একটি বিকল্প উপস্থাপন করে যা অনেক বেশি দক্ষ।


-1

একসাথে স্ট্রিংগুলি একত্রীকরণে এটি কি অক্ষম?

না।

আপনি কি 'মাইক্রো-অপটিমাইজেশন থিয়েটারের স্যাড ট্র্যাজেডি' পড়েছেন ?


4
"অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল"। - নুথ
স্কট সি উইলসন

4
অপ্টিমাইজেশনে সমস্ত খারাপের মূলটি প্রসঙ্গ ছাড়াই এই বাক্যাংশটি নিচ্ছে।
ওজেড_

কিছু সমর্থনমূলক কারণ সরবরাহ না করে কিছু বলার বিষয়টি সত্য যেমন ফোরামে কার্যকর হয় না।
এডওয়ার্ড স্ট্রেঞ্জ

@ ক্রেজি এডি: আপনি কি পড়েছেন কেন জেফ আতউডের কথা বলতে হয়েছিল?
জিম জি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.