String Birleştirme Ve Performans

Uygulamalırımızda en çok kullandığımız değişken tiplerinden bir tanesi de string’dir. Bir çok işlemimizi string’ler üzerinde yaparız. Ancak strinf değişkenleri kullanırken dikkat etmemiz gereken ve bize performans açısından büyük katkı sağlayacak bir kaç nokta vardır.

Hepimiz uygulamalarımızda

 string x = “”;
        for (int i=0; i <= 100000; i++)
        {
            x += i.toString();
        }

tarzında bir string birleştirme işlemi gerçekleştirmişizdir. Bu tarz bir string birleştirme işlemi küçük döngülerde bir problem oluşturmazken büyük döngülerde başımıza ciddi performans problemleri çıkarabilir. Bunun nedeni ise böyle bir birleştirme işleminde bütün atama işlemlerinde yeni bir nesne oluşturulmasıdır. Yani döngümüzün ilk tekrarında x değerini alır, yeni bir string değişken oluşturur. Eski değeri yeni değişkene atar ve sonrasında verdiğimiz string değeri buna ekler. Bir sonraki adımda yine yeni bir nesne oluşturulur, bu kez ikinci nesnedeki değer üçüncüye atılır ve adımlar bu şekilde devam eder. Yani yukarıdaki gibi bir döngü yazmış iseniz, sadece string birleştirme işlemi için 100000 ekstra nesne oluşturulur. Buna uygulamanıza esktra yük demektir.

Bu soruna çözüm ise StringBuilder. Yukarıdaki kodu aşağıdaki şekilde de yazabiliriz.

        StringBuilder builder = new StringBuilder();
        for (int i=0; i < 100000; i++)
        {
            builder.Append(i.toString());
        }
       string x = builder.ToString();

Kodumuzu bu hale getirdiğimizde bu kod parçası için yaklaşık 10 kat hız artışı sağlamaktadır.

Peki heryerde string oluşturma işlemlerimizi bu şekilde mi yapmalıyız. Tabii ki hayır. Örneğin

string tamad=ad+” “+soyad;

kod parçası yerine

 StringBuilder builder = new StringBuilder();
 builder.Append (ad);
 builder.Append (” “);
 builder.Append (soyad);
 string tamad= builder.ToString();

kod parçasını kullanmak bize bir performans artışı sağlamayacağı gibi okunurluğu da azaltacaktır.

UpdatePanel Kullanırken…

Asp.Net ile uygulama geliştirirken hepimiz bir kere bile olsa updatepanel kullanmışızdır. Bazen bunu kullanılabilirlik için yaparken bazen de performans için yapabiliyoruz. Eğer updatepanel’i performans için kullanıyorsak dikkat etmemiz gereken bir nokta var. Örneğin bir web uygulaması yazdık. Bu uygulamada sol tarafta ağır sorgular sonucu getirilen bilgiler listeleniyor. Sağ tarafta ise basit kullanıcı işlemleri yapılıyor. Uygulamamızı çalıştırdığımızda sol taraftaki işlemler nedeniyle sayfadaki her postback’de sayfamız geç yükleniyor. Oysa biz sağ taraf güncellenirken sol tarafta işlemlerimize devam etmek istiyoruz. Hemen updatepanel aklımıza geliyor. İki tane updatepanel kullanıyoruz sağ ve sol taraf için. Tabii ki UpdateMode’u nu da conditional yapmamız gerektiğini biliyoruz. Evet tamam şimdi oldu. Mu? Uygulamamızı tekrar çalıştırdığımızda sağdaki updatepanel’de bir güncelleme yaptığımızda sayfamızın yine yavaş geldiğini görürüz. Bunun nedeni sadece bir updatepanel güncellenmesine rağmen ASP.Net sayfasının yaşam döngüsü nedeniyle sol taraftaki kodun bağlama işlemi de tekrar edilir. Bir de custom control ya da user control kullanırsanız, bunu farketmek daha da zor olacaktır. Bunu aşmak için belirli sayfanın yaşam döngüsünde postback’e neden olan kontrolleri takip ederek, belirli işlemlerin yapılmamasını sağlamalıyız. Mesela örneğimizdeki sol taraftaki databind işlemi için sadece bir timer ise yada belirli bir buton ise databind işlemini gerçekleştirmesini sağlayabiliriz.

EQATEC Profiler

          Bir programdan bahsetmek istiyorum bugün. Adı başlıktan da anlaşılacağı gibi EQATEC Profiler. Peki ne işe yarar bu program. Yazdığınız uygulamanın performansını gösterir diyebiliriz özetle. Daha doğrusu programınızda hangi nesneler kaç kez çağrılmış, bunlar ne kadar süre işlem gerçekleştirmiş, en fazla zaman harcanan kısım hangisi gibi bilgilere EQATEC Profiler sayesinde ulaşabiliyorsunuz. En güzel yanı ücretsiz olması, piyasada ücretli ya da ücretsiz daha iyi uygulamalar tabii ki vardır. Ama bu bana fazlasıyla yardımcı oldu.

        Peki ben nasıl tanıştım bu programla. Continue…