İşte bu noktada kodun oluşturulma süresi büyük önem kazanıyor. "Generate" dedikten sonra yavaş yavaş ilerleyen bir progress bar görüntüsünü hiç kimse sevmez. Üreteci hazırlayan arkadaşın da hoşuna gitmemiş olmalı ki performans iyileştirmesine gitmeye karar verdi. Benim de String ve StringBuilder arasındaki farkı öğrenmem onun sayesindedir. Kodu geliştirip çalıştırdığında göz açıp kapayıncaya kadar kodun üretildiğini görünce merak ettim, String yerine StringBuilder kullandım hepsi bu dedi. Bunun üzerine taa üniversitedeyken "String class'ı var ya nasıl olsa, bunların hepsini yapıyor, StringBuilder gibi daha komplex bir şeyi birşeyi hatırlamama neden gerek olsun ki" şeklindeki tembel düşüncemi hatırlayıp utandım, ve merakımı gidermeye karar verdim.
Şimdi işin hikaye kısmını geçip konuya girelim:
Kaynağım CodeProject. Konuyla ilgili en sade ve öz anlatımı burda buldum. Alois Kraus arkadaş iyi iş çıkarmış. Özetle durum şu:
String'in değişken olmayan(immutable) bir yapısı var, o yüzden herhangi bir ekleme çıkarma vs. işlemi yaptığınızda yeni bir obje üretilmekte. StringBuilder ise değişken(mutable) bir yapıda. Ama tabi bu her zaman iyi anlamına gelmiyor. Kraus da diyor ki, assembler kodunu görmeden hangisinin daha iyi performans vereceğine karar vermeyin.
Assemblerla uğraşmak istemeyenler için(sanırım çoğumuz bu kategorideyiz) Kraus bir performans testi yapmış. Insert, Remove, Replace, Format, Append, Join gibi fonksiyonların zaman ve uygulanan operasyon sayısı grafiğini çıkaracak testler hazırlamış. Grafikler aynen şunlar:


Hiç yorum yok:
Yorum Gönder