C# StringBuilder
I. Versiyon
string s1 = "deneme";
for(i = 0; i < 10 ; i++)
{
s1 += i.ToString();
}
II. Versiyon
StringBuilder s1 = new StringBuilder("deneme");
for(i = 0; i < 10 ; i++)
{
s1.Append(i)
}
bu iki kod parçasına bakılırsa biri String'e String ekleyerek yeni String oluşturarak diğeri ise StringBuilder classını kullanarak bu class'ın Append metoduyla ekleyerek ayni sonucu veriyor. Fakat aralarında önemli bir fark var. String'ler değişmezdir yani bir kere yaratıldıklarında üzerlerinde değişiklik yaptığımızda bu değişiklik üstüne eklenmez bellekte yeni bir String oluşur. Yani örneğimize bakarsak önce s1 "deneme" olarak geldi. Ardından for bir kez döndü ve sonuc "deneme0" oldu bu oluken deneme nesnesi hala belektedir ve "deneme0" için bellekte yeni bir yer açılır. Bu durum bizim örneğimizde 10 kez dönüyorsa bellekte 10 String için yer demektir bizi şimdilik çok etkilemez ama daha büyük sayılı döngülerde işimizi zorlaştıracaktır.
Bu istenmeyen bellek yükünden kurtulmak için böyle durumlarda StringBuilder imdadımıza koşuyor. Nasıl koşuyor 1. örnekte bellekte 10 tane String oluşurken 2. örnekte sadece bir String oluşuyor. Çünkü değişken olmadığı için Append metodu ile string üzerinde istediğimiz gibi oynayabiliyoruz. Bu da bize büyük bir performans artısı sağlıyor.
string s1 = "deneme";
for(i = 0; i < 10 ; i++)
{
s1 += i.ToString();
}
II. Versiyon
StringBuilder s1 = new StringBuilder("deneme");
for(i = 0; i < 10 ; i++)
{
s1.Append(i)
}
bu iki kod parçasına bakılırsa biri String'e String ekleyerek yeni String oluşturarak diğeri ise StringBuilder classını kullanarak bu class'ın Append metoduyla ekleyerek ayni sonucu veriyor. Fakat aralarında önemli bir fark var. String'ler değişmezdir yani bir kere yaratıldıklarında üzerlerinde değişiklik yaptığımızda bu değişiklik üstüne eklenmez bellekte yeni bir String oluşur. Yani örneğimize bakarsak önce s1 "deneme" olarak geldi. Ardından for bir kez döndü ve sonuc "deneme0" oldu bu oluken deneme nesnesi hala belektedir ve "deneme0" için bellekte yeni bir yer açılır. Bu durum bizim örneğimizde 10 kez dönüyorsa bellekte 10 String için yer demektir bizi şimdilik çok etkilemez ama daha büyük sayılı döngülerde işimizi zorlaştıracaktır.
Bu istenmeyen bellek yükünden kurtulmak için böyle durumlarda StringBuilder imdadımıza koşuyor. Nasıl koşuyor 1. örnekte bellekte 10 tane String oluşurken 2. örnekte sadece bir String oluşuyor. Çünkü değişken olmadığı için Append metodu ile string üzerinde istediğimiz gibi oynayabiliyoruz. Bu da bize büyük bir performans artısı sağlıyor.
0 yorum :
Yorum Gönder