, ben Shlemiel the painter's algorithm benchmarking ile eğlenmeyi oldu. Boş bir dize ile başladım, 1000 boş alandan bir tane daha oluşturdum ve her seferinde ne kadar sürdüğünü zamanla düz eski verimsiz dizgi birleştirmeyi kullanarak diğerine eklemeye başladım.Bu artışa, dizgi birleştirme sırasında neden olan nedir? Yani merak ve boşta sıkıntıdan
string s1 = "";
string s2 = "";
while (s2.Length < 1000)
{
s2 += " ";
}
while (true)
{
Stopwatch sw = Stopwatch.StartNew();
s1 += s2;
sw.Stop();
Console.WriteLine(" {0}| {1}", s1.Length, sw.ElapsedMilliseconds);
}
Beklendiği gibi, daha uzun dize var, o kadar uzun (beklediğimden çok daha küçük etkisi oldu, ama bu başka bir gün için başka bir soru) bitiştirmek aldı. Ne şaşırtıcı oldu, ancak geçen sürede tutarlı ani oldu. Altıncı ayinlerin her biri, önceki beş birleştirmeden yaklaşık iki ila üç kez aldı.
Length | Time (ms)
-----------------------
32250000 | 117
32251000 | 44
32252000 | 31
32253000 | 30
32254000 | 30
32255000 | 32
32256000 | 129
32257000 | 35
32258000 | 43
32259000 | 34
32260000 | 30
32261000 | 29
32262000 | 107
32263000 | 47
32264000 | 29
32265000 | 30
32266000 | 31
32267000 | 29
32268000 | 110
32269000 | 46
32270000 | 31
32271000 | 30
32272000 | 30
32273000 | 30
32274000 | 113
Bu örnekler, dizenin büyük ölçüde artmaya başlamasından sonra ortaya çıkar, ancak desen başlangıçtan itibaren tutulur. Büyük ölçüde, ilk bin ya da öylesine numune, deseni farketmek için çok küçüktür, ancak 1.8k işaretinin etrafında tanınabilirdir.
İlk varsayımım, sahnelerin ardında, karakterlerin bir dolu ArrayList/vektör türü anlaşmada depolanmasıydı, bu tam dolu olduğunda boyutu ikiye katlıyordu, ancak daha fazla düşündüğümden, bu uygun değil - durum buysa, spike doğrusal olmak yerine üstel periyotlarda gelirdi.
Yani, kısacası: burda neler oluyor?
Muhtemelen çöp toplama. Gerçekten ilgileniyorsanız bir profiler çalıştırmayı deneyin; Korkarım ki tahmin edemeyiz. – CodeCaster
GC, her altıncı iterasyonda gerçekleşecek kadar tutarlı mıdır (tüm veri kümesi için tutarlı olduğu varsayılarak)? – Polynomial