चूँकि इसके लिए एक स्पष्टीकरण खोजना मुश्किल है जो या तो राय से प्रभावित नहीं है या मेरे द्वारा खुद को परखने के लिए लिनक्यूपैड पर कोड की एक बिट लिखने के लिए सोचा गया था।
मैंने पाया कि i.ToString () परिवर्तन समय (छोटे छोरों में दिखाई) का उपयोग करने के बजाय छोटे आकार के तारों का उपयोग कर रहा है।
परीक्षण समझदारी से तुलनीय श्रेणियों में समय माप रखने के लिए पुनरावृत्तियों के विभिन्न अनुक्रमों का उपयोग करता है।
मैं अंत में कोड की नकल करूँगा ताकि आप इसे स्वयं आज़मा सकें (परिणाम.चर्चा ... डंप () LINQPad के बाहर काम नहीं करेगा)।
आउटपुट (एक्स-एक्सिस: परीक्षण किए गए पुनरावृत्तियों की संख्या, वाई-एक्सिस: टिक में लगने वाला समय):
Iterations अनुक्रम: 2, 3, 4, 5, 6, 7, 8, 9, 10
Iterations अनुक्रम: 10, 20, 30, 40, 50, 60, 70, 80
Iterations अनुक्रम: 100, 200, 300, 400, 500
कोड (LINQPad 5 का उपयोग करके लिखा गया है):
void Main()
{
Test(2, 3, 4, 5, 6, 7, 8, 9, 10);
Test(10, 20, 30, 40, 50, 60, 70, 80);
Test(100, 200, 300, 400, 500);
}
void Test(params int[] iterationsCounts)
{
$"Iterations sequence: {string.Join(", ", iterationsCounts)}".Dump();
int testStringLength = 10;
RandomStringGenerator.Setup(testStringLength);
var sw = new System.Diagnostics.Stopwatch();
var results = new Dictionary<int, TimeSpan[]>();
RandomStringGenerator.GetRandomString();
foreach (var iterationsCount in iterationsCounts)
{
TimeSpan elapsedForString, elapsedForSb;
sw.Restart();
var str = string.Empty;
for (int i = 0; i < iterationsCount; i++)
{
str += RandomStringGenerator.GetRandomString();
}
sw.Stop();
elapsedForString = sw.Elapsed;
sw.Restart();
var sb = new StringBuilder(string.Empty);
for (int i = 0; i < iterationsCount; i++)
{
sb.Append(RandomStringGenerator.GetRandomString());
}
sw.Stop();
elapsedForSb = sw.Elapsed;
results.Add(iterationsCount, new TimeSpan[] { elapsedForString, elapsedForSb });
}
results.Chart(r => r.Key)
.AddYSeries(r => r.Value[0].Ticks, LINQPad.Util.SeriesType.Line, "String")
.AddYSeries(r => r.Value[1].Ticks, LINQPad.Util.SeriesType.Line, "String Builder")
.DumpInline();
}
static class RandomStringGenerator
{
static Random r;
static string[] strings;
public static void Setup(int testStringLength)
{
r = new Random(DateTime.Now.Millisecond);
strings = new string[10];
for (int i = 0; i < strings.Length; i++)
{
strings[i] = Guid.NewGuid().ToString().Substring(0, testStringLength);
}
}
public static string GetRandomString()
{
var indx = r.Next(0, strings.Length);
return strings[indx];
}
}