স্ট্রিং.ফর্ম্যাট StringBuilder
অভ্যন্তরীণভাবে ব্যবহার করে ... সুতরাং যুক্তিযুক্তভাবে ধারণাটি নিয়ে যায় যে আরও ওভারহেডের কারণে এটি কিছুটা কম পারফর্মেন্ট হবে। তবে, একটি সাধারণ স্ট্রিং কনটেনটেশন হল একটি উল্লেখযোগ্য ডিগ্রি দ্বারা ... অন্য দুটির মধ্যে একটি স্ট্রিং ইনজেক্ট করার দ্রুততম পদ্ধতি। এই প্রমাণটি রিকো মারিয়ানি তার প্রথম পারফরম্যান্স কুইজে বহু বছর আগে দেখিয়েছিলেন। সরল সত্যটি হ'ল সংক্ষিপ্তকরণগুলি ... যখন স্ট্রিং পার্টসের সংখ্যাটি জানা থাকে (কোনও সীমা ছাড়াই..আপনি সহস্র অংশগুলি সংশ্লেষ করতে পারেন ... যতক্ষণ আপনি এর সর্বদা 1000 অংশগুলি জানেন) ... স্ট্রিংয়ের চেয়ে সর্বদা দ্রুত হয় StringBuilder
। বিন্যাস। এগুলি একটি একক মেমরি বরাদ্দ দিয়ে একটি সিরিজ মেমরি অনুলিপি সহ সঞ্চালিত হতে পারে। প্রমাণ এখানে
এবং এখানে কিছু স্ট্রিং.কনক্যাট পদ্ধতির আসল কোড রয়েছে যা শেষ পর্যন্ত ফিল স্ট্রিংচেকডকে কল করে যা মেমরি অনুলিপি করতে পয়েন্টার ব্যবহার করে (রিফ্লেক্টরের মাধ্যমে আহরণ করা):
public static string Concat(params string[] values)
{
int totalLength = 0;
if (values == null)
{
throw new ArgumentNullException("values");
}
string[] strArray = new string[values.Length];
for (int i = 0; i < values.Length; i++)
{
string str = values[i];
strArray[i] = (str == null) ? Empty : str;
totalLength += strArray[i].Length;
if (totalLength < 0)
{
throw new OutOfMemoryException();
}
}
return ConcatArray(strArray, totalLength);
}
public static string Concat(string str0, string str1, string str2, string str3)
{
if (((str0 == null) && (str1 == null)) && ((str2 == null) && (str3 == null)))
{
return Empty;
}
if (str0 == null)
{
str0 = Empty;
}
if (str1 == null)
{
str1 = Empty;
}
if (str2 == null)
{
str2 = Empty;
}
if (str3 == null)
{
str3 = Empty;
}
int length = ((str0.Length + str1.Length) + str2.Length) + str3.Length;
string dest = FastAllocateString(length);
FillStringChecked(dest, 0, str0);
FillStringChecked(dest, str0.Length, str1);
FillStringChecked(dest, str0.Length + str1.Length, str2);
FillStringChecked(dest, (str0.Length + str1.Length) + str2.Length, str3);
return dest;
}
private static string ConcatArray(string[] values, int totalLength)
{
string dest = FastAllocateString(totalLength);
int destPos = 0;
for (int i = 0; i < values.Length; i++)
{
FillStringChecked(dest, destPos, values[i]);
destPos += values[i].Length;
}
return dest;
}
private static unsafe void FillStringChecked(string dest, int destPos, string src)
{
int length = src.Length;
if (length > (dest.Length - destPos))
{
throw new IndexOutOfRangeException();
}
fixed (char* chRef = &dest.m_firstChar)
{
fixed (char* chRef2 = &src.m_firstChar)
{
wstrcpy(chRef + destPos, chRef2, length);
}
}
}
তাহলে:
string what = "cat";
string inthehat = "The " + what + " in the hat!";
উপভোগ করুন!