16 Eylül 2012 Pazar

Web projelerinde string operasyonları

     Mesela diyelim ki bir web projeniz var ve proje bolca string operasyonu yapıyor. Bazı veriler alıyor onları birleştiriyor, parçalıyor ve output olarak ta bir text file oluşturuyor.

     String operasyonları yaparken += operatörünü kullanmaktan kaçınmamız gerekiyor elden geldiğince. Özellikle de döngülerin içinde. Çünkü bu işlem inanılmaz memory yiyor ve cpu yu çok yoruyor. Bunun yerine StringBuilder vb birşey kullanmamız gerekiyor.

     Javadan örnek vermek gerekirse bu yapıya alternatif olarak StringBuilder ve StringBuffer ımız var. Bunların birbirlerinden farkı StringBuilder ın synchronized metodu yoktur yani ThreadSafe değildir. StringBuffer ın ise hemen bütün metodları synchronized tır.Diyelim ki global bir string üzerinde değişiklikler yapıcaksınız, sessionların verileri birbirine karışmaması için StringBuffer kullanmalısınız. Eğer metod içi işlemler varsa StringBuilder işinizi görücektir.Gereksiz yerde StringBuffer kullanımı sistemi inanılmaz yavaşlatır.Tüm metodları synchronized olduğu için bir nevi lock unlock mekanızması vardır ve metodlar üzerinden tek threadden fazlası dolaşamaz.

 Yani kısaca ;

 String s = "";
 for(int i=0;i<100;i++){
    s+="asdasdasd";
}

yerine ;


StringBuilder s = new StringBuilder();
 for(int i=0;i<100;i++){
    s.append("asdasdasd");
}

kullanılmalıdır. Eger bu işlemi bir test ortamında 1000000 kere döndürüp memory ve zaman sonuçlarını karşılaştırırsanız farkı kolaylıkla görebilirsiniz.



Hiç yorum yok:

Yorum Gönder