যেহেতু আমি মনে করি না যে উত্তরগুলি এখানে সমস্ত কিছু কভার করে, তাই আমি এখানে একটি ছোট সংযোজন করতে চাই।
Console.WriteLine(string format, params object[] pars)
কল string.Format
। '+' এর সাহায্যে স্ট্রিং কনকেন্টেশন বোঝায়। আমি মনে করি না এটি সর্বদা শৈলীর সাথে করা উচিত; আমি যে প্রসঙ্গে রয়েছি তার উপর নির্ভর করে আমি দুটি শৈলীর মিশ্রণ করতে চাই।
সংক্ষিপ্ত উত্তর
আপনি যে সিদ্ধান্তটির মুখোমুখি হচ্ছেন তা হ'ল স্ট্রিং বরাদ্দের সাথে। আমি এটিকে সহজ করার চেষ্টা করব।
বলুন তো আছে
string s = a + "foo" + b;
আপনি যদি এটি কার্যকর করেন তবে এটি নীচে মূল্যায়ন করবে:
string tmp1 = a;
string tmp2 = "foo"
string tmp3 = concat(tmp1, tmp2);
string tmp4 = b;
string s = concat(tmp3, tmp4);
tmp
এখানে প্রকৃতপক্ষে কোনও স্থানীয় পরিবর্তনশীল নয়, তবে এটি জেআইটির পক্ষে একটি অস্থায়ী (এটি আইএল স্ট্যাকের উপরে চাপ দেওয়া)। যদি আপনি স্ট্যাকের উপর একটি স্ট্রিং চাপান (যেমন ldstr
আক্ষরিক জন্য আইএল), আপনি স্ট্যাকের উপর একটি স্ট্রিং পয়েন্টার একটি রেফারেন্স রাখেন।
যে মুহুর্তে আপনি ফোন করবেন concat
এই রেফারেন্সটি একটি সমস্যায় পরিণত হয়, কারণ কোনও স্ট্রিং রেফারেন্স উপলব্ধ নেই যা উভয় স্ট্রিং রয়েছে। এর অর্থ হল। নেটকে মেমরির একটি নতুন ব্লক বরাদ্দ করতে হবে এবং তারপরে এটি দুটি স্ট্রিং দিয়ে পূরণ করুন with এই সমস্যা হওয়ার কারণ, বরাদ্দ তুলনামূলকভাবে ব্যয়বহুল।
যা প্রশ্নটিতে পরিবর্তন করে: আপনি কীভাবে concat
অপারেশন সংখ্যা হ্রাস করতে পারেন ?
সুতরাং, মোটামুটি উত্তরটি হল: string.Format
> 1 কনক্টের জন্য, '+' 1 কনকটের জন্য ঠিক কাজ করবে। এবং যদি আপনি মাইক্রো-পারফরম্যান্স অপ্টিমাইজেশানগুলি করার বিষয়ে চিন্তা না string.Format
করেন তবে সাধারণ ক্ষেত্রে ঠিক কাজ করবে।
সংস্কৃতি সম্পর্কে একটি নোট
এবং তারপরে সংস্কৃতি বলে কিছু আছে ...
string.Format
আপনাকে CultureInfo
আপনার ফর্ম্যাটিংয়ে ব্যবহার করতে সক্ষম করে । একটি সাধারণ অপারেটর '+' বর্তমান সংস্কৃতি ব্যবহার করে।
আপনি যদি ফাইল ফর্ম্যাট এবং f.ex লিখছেন তবে এটি বিশেষত একটি গুরুত্বপূর্ণ মন্তব্য is double
মানগুলি যা আপনি একটি স্ট্রিংয়ে 'যুক্ত' করেন। বিভিন্ন মেশিনে, আপনি যদি string.Format
স্পষ্টভাবে ব্যবহার না করেন তবে আপনি বিভিন্ন স্ট্রিং দিয়ে শেষ করতে পারেন CultureInfo
।
F.ex. আপনি যদি একটি 'পরিবর্তন করেন তবে কী হবে তা বিবেচনা করুন।' আপনার 'কমা-বিচ্ছিন্ন-মান ফাইলটি লেখার সময়', 'এর জন্য ... ডাচ ভাষায় দশমিক বিভাজক একটি কমা, সুতরাং আপনার ব্যবহারকারী সম্ভবত একটি' মজার 'চমক পেতে পারেন।
আরও বিস্তারিত উত্তর
আপনি যদি স্ট্রিংয়ের সঠিক আকারটি আগে জানেন না তবে আপনি যে বাফার ব্যবহার করেন তাতে সামগ্রিকভাবে নীতি ব্যবহার করা ভাল। স্ল্যাক স্পেসটি প্রথমে পূরণ করা হয়, যার পরে ডেটা অনুলিপি করা হয়।
ক্রমবর্ধমান মানে মেমরির একটি নতুন ব্লক বরাদ্দ করা এবং নতুন বাফারে পুরানো ডেটা অনুলিপি করা। মেমরির পুরানো ব্লকটি তখন মুক্তি পেতে পারে। আপনি এই মুহুর্তে নীচের লাইনটি পান: বর্ধন একটি ব্যয়বহুল ক্রিয়াকলাপ।
এটি করার সবচেয়ে ব্যবহারিক উপায় হ'ল একটি সামগ্রিক নীতি ব্যবহার করা। সর্বাধিক সাধারণ নীতি হ'ল ২ এর ক্ষমতায় থাকা বাফারগুলিকে সামগ্রিকভাবে চালিত করা Of অবশ্যই, আপনাকে এটির তুলনায় কিছুটা স্মার্ট করতে হবে (যেহেতু এটি ইতিমধ্যে যদি আপনার জানা থাকে যে আপনার যদি 128 টি অক্ষর প্রয়োজন তবে এটি 1,2,4,8 থেকে বাড়ার কোনও অর্থ হয় না makes ) কিন্তু আপনি ছবি পেতে. নীতিটি নিশ্চিত করে যে আমি উপরে বর্ণিত ব্যয়বহুল ক্রিয়াকলাপগুলির খুব বেশি দরকার নেই।
StringBuilder
একটি শ্রেণি যা মূলত দুটি এর ক্ষমতার অন্তর্নিহিত বাফারকে সামগ্রিকভাবে গড়ে তোলে। ফণা অধীন string.Format
ব্যবহার StringBuilder
করে।
এটি আপনার সিদ্ধান্তকে সামগ্রিকভাবে-ও-সংযোজন (-মল্টিপল) (ডাব্লু / ডাব্লু সংস্কৃতি) বা কেবল বরাদ্দ-এবং-সংযোজনের মধ্যে একটি বেসিক বাণিজ্য বন্ধ করে দেয়।
string.Format
যে কোনও যৌগিক বিন্যাস বৈশিষ্ট্য (যেমন সহজ{0}
) ব্যবহার করে না এবং এগুলিকে যথেষ্ট দ্রুত স্ট্রিং কনকেন্টেশন দিয়ে প্রতিস্থাপন করে। আমি অবাক হই যে পোস্টশার্পের মতো কোনও বিদ্যমান আইএল লেখক যেমন এরকম কীর্তি অর্জনযোগ্য।