Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Kadir Çamoğlu
Kadir Çamoğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
5 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Kadir Çamoğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 26.11.2003
Okunma Sayısı : 31721
Yorum Sayısı : 6     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 29.3.2024
Turhal Temizer
Mac OS/X Removing CUDA 29.3.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 29.3.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 29.3.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Metin(String) İşlemlerinde Performansı Artırmak
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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.

'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.

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.



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
  • Yazılan Yorumlar
  • Yorum Yaz
KAS
27
2013
burda demişsinizki 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. yanlış yazdınız sanırım string bir değişkenin içeriği elbetteki değiştirilir
KAS
27
2013
burda demişsinizki 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. yanlış yazdınız sanırım string bir değişkenin içeriği elbetteki değiştirilir
KAS
27
2013
burda demişsinizki 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. yanlış yazdınız sanırım string bir değişkenin içeriği elbetteki değiştirilir
KAS
27
2013
burda demişsinizki 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. yanlış yazdınız sanırım string bir değişkenin içeriği elbetteki değiştirilir
KAS
27
2003
güzel bir konu ve güzel bir anlatım :-)
KAS
26
2003
gerçekten ilginç bir konuda yazmışsınız.ellerinize sağlık. şunu eklemek istiyorum : iki yöntem arasında genellikle 50 ila 100 kat gibi bir hızlılık oranı oluyor. Eğer bu iki işlemin yapılma sırasını değiştirirseniz bu sefer sisteminizin durumuna göre bu katsayılar biraz daha azalmakta.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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