CSharp etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
CSharp etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

16 Ağustos 2014 Cumartesi

C# String Birleştirmede Performans

.Net çatısı altında özellikle de birden fazla client'ın aynı anda bağlandığı bir mimaride, server tarafında string birleştirme işlemleri çok sık kullanılıyorsa dikkat edilmesi gereken bir konu var.


İşletim sisteminin çalışma yapısı gereği .net çatısı altında string değişkenler birbirleri ile birleştirildiklerinde Ram Bellek üzerinde eski ve yeni değer olmak üzere 2 adet yer ayırılır ve bu yerlerde bu değişkenlerin değerleri saklanır. Örnek vermek gerekirse,

diyelim String s1 = "C#"; ve String s2 = "CSharp"; diye iki değişken tanımladık ve daha sonra s1 = s1 + s2; komutunu verdik.
Bu durumda en başta bellek üzerinde s1 ve s2 değişkenleri için yer ayırılmış ve değerleri saklanmıştı. Daha sonra bizim birleştirme işlemimizden sonra durum şöyle oldu. s1, s2 ve yeni s1. s1 değişkeninin birleşmeden önceki hali de bellek üzerinde saklanmakta. Bu işlem küçük sayıdaki birleştirmeler için elbet dert edecek kadar sorunlar çıkartmayacaktır ancak özellikle "Web Service" veya Web Siteleri gibi birden fazla Client'ın aynı anda istek yapması durumunda bu tür birleştirmeler can yakabilir. Durumu daha iyi özetleyebilmek adına aşağıdaki örneği inceleyelim.



Formumuz üzerinde 2 adet buton ve 2 adet textBox bulunmakta.
Üzerinde Normal yazan buton a basıldığında 0 dan başlayarak 50.000 e kadar olan bütün sayıları string birleştirme yolu ile birleştirerek tek bir değişkende toplayacağız.Toplamda bu işlemin bilgisayarımız tarafından ne kadar sürdüğünü hesaplayıp çıkan değeri milisaniye cinsinden textBox'a yazdıracağız.

With SB butonuna tıklantığında ise .Net yapısının bizim için geliştirmiş olduğu bir "Nesne" kullanarak aynı birleştirme işlemini gerçekleştireceğiz. "StringBuilder". Bu nesne aslına bakılacak olursa List<String> Tipinde bir nesne gibi iş yapıyor. StringBuilder nesnesi içerisinde birleştirme yaptığımızda ise Bellek üzerinde bu nesne için tek bir yer ayırılıyor ve her birleştirme işlemi sırasında bu bilgi güncelleniyor.




Aşağıdaki ekranda ise kullandığımız kodlar ve almış olduğumuz sonuç yer alıyor. Aradaki süre farkı epey fazla.

İyi düşünün iyi yazın.

Başka Makalede görüşmek üzere