Çoğu zaman yazılım geliştiricilerin dikkat etmediği, ancak uygulama performansını ciddi oranda etkileyen bir konudur string birleştirme işlemleri. Çoğu zaman += ile bir string değişkenin değerini değiştirmeye çalışan yazılım geliştiriciler, büyük miktarda veri ile çalıştıkları zamanlarda uygulamanın ne kadar yavaş çalıştığından şikayet ederler.
Eğer string birleştirmeyi tek bir ifade içinde gerçekleştiriyorsanız (bir başka değişle, birleştirilecek string değişkenlerin sayısı belirliyse), String.Concat metodu çalıştırılır. Bu durumda performans kaybı yaşamayız çünkü gereksiz geçici nesneler oluşturulmaz. Dolayısıyla bu senaryoda bu çözüm oldukça efektiftir.
Ancak birleştirilecek string değişkenlerin sayısı belirli değilse, örneğin string birleştirme işlemini bir döngü içinde gerçekleştiriyorsanız, += ifadesi ile string birleştirme yapmak uygulamanız için ciddi performans kaybı anlamına gelecektir.
StringBuilder sınıfı 16′lık varsayılan kapasite ile oluşturulur. Eğer bu değerden daha fazla değer eklemek isterseniz, StringBuilder sınıfı sizin için o anki boyutunun 2 katı oranında bir alanı rezerve eder. Ancak bu senaryoda += ifadesini kullanırsanız, döngünün her adımında bir geçici nesne oluşturulacağından işlem süresi artacaktır.
Aşağıdaki kodu çalıştırdığımız zaman işlem süresi 5,282 Saniye olarak gerçekleşiyor.
string result = String.Empty;
DateTime startTime = DateTime.UtcNow;
for (int i = 0; i < 35000; i++)
{
result += r.Next(10000, 99999);
}
DateTime endTime = DateTime.UtcNow;
Ancak kodu aşağıdaki şekilde değiştirdiğim zaman işlem süresi 0,11 Saniyeye düşüyor.
StringBuilder sb = new StringBuilder();
string result = String.Empty;
DateTime startTime = DateTime.UtcNow;
for (int i = 0; i < 35000; i++)
{
sb.Append(r.Next(10000, 99999));
}
result = sb.ToString();
DateTime endTime = DateTime.UtcNow;
Sanıyorum bu basit örnek bile, bu basit ayrıntının büyük ölçekli projelerde ne kadar büyük bir performans farklı yaratacağını göstermek için yeterli olmuştur.