|  | 
        
            | 
                    
                        | Metin(String) İşlemlerinde Performansı Artırmak |  |  
                        | 
	
    
		
            | Gönderiliyor lütfen bekleyin... | 
 |  | 
        
            | Programlama yaparken 
  sık sık metinsel işlemler yapmak durumunda kalırız. 
 Bir metni başka 
  bir metinle birleştiririz...
 
 Büyükçe bir metnin 
  içerisinden bir bölümünü alırız...
 
 İki metni birbiriyle 
  karşılaştırırız...
 
 
 ....
 
 Bu liste böylece 
  uzar gider. Metinsel işlemler denilince akla gelen ilk şey metin birleştirme 
  işlemidir. “Bir metnin bir diğerine eklenmesi.” İş metinle ilgili olduğunda 
  bu işi gerçekleştirmek için C# ta ilk akla gelen veri tipi “string” dir. “System.String” sınıfını (class) temsil eden string bir 
  referans türüdür. Ancak biraz farklı bir referans türüdür. Yapı olarak “immutable”, 
  yani değişmezdir/sabittir ve bu yüzden bir kez yapılandırıldıktan sonra içeriği 
  değiştirilemez. İşte bu yapıdan dolayıdır ki bir string değişkene ancak 
  bir kez değer atayabilirsiniz.
 
 Peki ya aşağıdaki 
  kod?
 
 string 
  metin="Merhaba";
 
 metin=metin + " Dünya!"; // metin=”Merhaba 
  dünya!”
 
 String bir 
  referans türü olduğu için bellekteki öbek (heap) bölgesinde yaratılır ve içeriğine 
  “Merhaba” yüklenir. Öbekteki bu nesneye kodun erişebilmesi için gerekli adres 
  bilgisi ise belleğin yığın (stack) bölgesinde yaratılan “metin” değişkenine 
  yazılır. Yani referans türlerde değişken nesneyi değil, nesnenin adresini tutar.
 
 Şimdi 
  ikinci satıra bakalım. Birinci satırda, metin değişkeninin temsil ettiği string 
  nesnesine “birinci string nesnesi” diyelim. İkinci satırdaki kod işlendiğinde 
  “birinci string nesnesi” üzerine yeni değer ekelenemeyeceğinden, öbekte ikinci 
  bir string nesnesi türetiliyor ve işlem sonucu, yani “Merhaba Dünya!” bu ikinci 
  string nesnesine yükleniyor.
 
 Ve 
  kilit nokta!
 
 “metin” 
  değişkeni ikinci satırdaki kodun sonunda artık “birinci string nesnesi”nin değil, 
  “ikinci string nesnesi”nin adresini taşımaya başlıyor. Yani artık “birinci string 
  nesnesi” tamamen erişilemez oluyor ve “Çöp Toplayıcı” (Garbage Collector) devreye 
  girip belleği temizleyene kadar bellekte yer tutmaya devam ediyor.
 
 İşte 
  “string” 
  veri tipinin bu yapısı nedeniyle metinsel işlemlerde daha iyi performans sağlamak 
  amacıyla System.Text isim alanı içine bulunan “StringBuilder” sınıfı 
  kullanılmaktadır.
 
 Algoritmaya 
  bağlı olarak değişmekle birlikte, StringBuilder sınıfının çok çok daha hızlı 
  olduğu söylenebilir.
 
 
 
  Aşağıdaki 
  örnek kod ve yukarıdaki ekran görüntüsü, metin birleştirme işlemlerinde gerçekten 
  çok iyi performans gösteren StringBuilder sınıfının, string ile karşılaştırıldığı 
  bir Console uygulamasıdır. 
    | 'string' 
      veri tipi kullanilarak metin birlestirme.....  
      Baslangiç 
        : 24.11.2003 20:31:06 
 Bitis 
        : 24.11.2003 20:31:08
 
 Toplam 
        süre : 2193,1536 milisaniye
 
 
 
 'StringBuilder' 
        sinifi kullanilarak metin birlestirme.....
 
 Baslangiç 
        : 24.11.2003 20:31:08
 
 Bitis 
        : 24.11.2003 20:31:08
 
 Toplam 
        süre : 20,0288 milisaniye
 
 
 
 Uygulamaya 
        sonlandirmak içim [Enter] tusuna basin.
 
 
 |  
 
 
 
 
   
    | static 
      void 
      Main(string[] args) { 
           // 
        Degisken tanimlari
 
 string 
        str="";
 
 System.Text.StringBuilder 
        sb=new System.Text.StringBuilder();
 
 DateTime 
        start; // islemin baslangiç ani
 
 DateTime 
        end; // islemin bitis ani
 
 TimeSpan 
        sure; // islemin toplam süresi
 
 // 
        string veri tipiyle metin birlestirme islemi.....
 
 Console.WriteLine("'string' 
        veri tipi kullanilarak metin birlestirme.....");
 
 start=DateTime.Now; 
        // islemin baslangiç zamani
 
 Console.WriteLine("Baslangiç 
        :\t" + start.ToString());
 
 
 
 // 
        Metin birlestirme islemi.....
 
 for(int 
        i=0;i<10000;i++)
 
 {
 
 str 
        +=i.ToString();
 
 }
 
 end=DateTime.Now; 
        // islemin bitis zamani
 
 Console.WriteLine("Bitis 
        :\t\t" + end.ToString());
 
 sure=end.Subtract(start); 
        // geçen süre hesaplaniyor..
 
 Console.WriteLine("Toplam 
        süre :\t" + sure.TotalMilliseconds + " milisaniye");
 
 //-------------------------------------------------------
 
 
 
 Console.WriteLine();
 
 
 
 // 
        StringBuilder sinifiyla metin birlestirme islemi.....
 
 Console.WriteLine("'StringBuilder' 
        sinifi kullanilarak metin birlestirme.....");
 
 start=DateTime.Now; 
        // islemin baslangiç zamani
 
 Console.WriteLine("Baslangiç 
        :\t" + start.ToString());
 
 
 
 // 
        Metin birlestirme islemi.....
 
 for(int 
        i=0;i<10000;i++)
 
 {
 
 sb.Append(i.ToString());
 
 }
 
 end=DateTime.Now; 
        // islemin bitis zamani
 
 Console.WriteLine("Bitis 
        :\t\t" + end.ToString());
 
 sure=end.Subtract(start);// 
        geçen süre hesaplaniyor..
 
 Console.WriteLine("Toplam 
        süre :\t" + sure.TotalMilliseconds + " milisaniye");
 
 //-------------------------------------------------------
 
 
 
 Console.WriteLine();
 
 
 
 Console.WriteLine("Uygulamaya 
        sonlandirmak içim [Enter] tusuna basin.");
 
 Console.ReadLine();
 }
 
 
 |  
   Kadir ÇAMOĞLU
 
 
 
                Makale:Metin(String) İşlemlerinde Performansı Artırmak C#, Visual C# ve .NET Kadir Çamoğlu
 | 
        
            |  | 
        
            |  | 
        
            | 
                    
                        
                            
                        
                            Eklenen Son 10 
                            Bu Konuda Geçmiş 10 
                        
                            Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
                         
                            Son Eklenen 10 Makale Yükleniyor
                         
                            Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
                         | 
        
            |  |