Compare | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar compare

C# string sınıfı ve özellikleri

03 September 2010 3 yorum

.Net string sınıfı uygulamalarımızda sıklıkla kullandığımız sınıflardan biridir.

.Net 1.1 versiyonundan itibaren gelişme göstermesine rağmen, hala bazı fonksiyonlarının eksik olduğunu veya tam anlamıyla kullanılmadığını düşünüyoum.

Bu makalemde, string sınıfının çok bilinmeyen veya çok kullanılmayan özelliklerine ve methodlarına değinmeye çalışacağım.

String değişkeni tekrar eden karakterler ile doldurmak

String değişkeni tekrar eden karakterler ile doldurmak için, String sınıfının constructor’ını kullanmak gerekir.

Örneğin, bir string değişkeni 50 adet nokta (.) karakteri ile doldurmak istiyorsak;

string degisken = new string('.', 50);

String değişkenin boş olduğunu kontrol etmek

String değişkenin değer içerip içermediğini belirlemek için string.Empty ve boş tırnaklar (“”) ile karşılaştırmamız gerekir.

if (degisken != null && degisken != "")
{
}

Alternatif olarak bu iki karşılaştırmayı yapmak yerine, .Net 2.0 ile gelen string.IsNullOrEmpty static fonksiyonunu kullanabiliriz;

if (!string.IsNullOrEmpty(degisken))
{
}

String.Empty ve boş tırnaklar (“”) arasındaki fark

İnternette çeşitli sitelerde, string.Empty ve boş tırnaklar (“”) arasında seçim yapmak için yazılmış makalelere rastlayabilirsiniz.

Aslında yapılan onlarca test gösteriyor ki, performans açısından bakıldığında string.Empty ve boş tırnaklar (“”) arasında önemsenmeyecek kadar küçük bir fark vardır.

Yapılan testler milyarlarca string değişken üzerinde yapılmasına rağmen ortaya çıkan fark göz ardı edilebilecek kadar düşük seviyededir.

String değişkenin içeriğini ters çevirmek

Bir string değişkenin içeriğini ters çevirmek için çeşitli algoritmalara internet üzerinden ulaşabilir veya kendi algoritmanızı geliştirebilirsiniz.

Kodun temizliği, hız, Unicode karakter setleri ile sorunsuz çalışabilmesi açısından benim en çok kullandığım yöntem şudur;

public static string Reverse(this string s)
{
	char[] charArray = s.ToCharArray();
	Array.Reverse(charArray);
	return new string(charArray);
}

String karşılaştırma

String değişkenin değeri null olabileceği için, karşılaştırma operatörünü (==) kullanmaktan kaçınmamız gerekir.

Bunun yerine String sınıfının static Compare method’unu kullanmamız daha doğrudur.

Static Compare method’u sayesinde null referans’ları doğru şekilde karşılaştırabilir, büyük-küçük harf duyarlılığını yoksayabilir, farklı Culture’daki değerleri karşılaştırabiliriz.

if (String.Compare(degisken1, degisken2, true) == 0)
{
}

Büyük-Küçük harf duyarlılığı olmayan IndexOf

String sınıfının IndexOf method’u büyük-küçük harf duyarlıdır. Büyük-Küçük harf duyarlılığı olmadan IndexOf method’unu kullanmak istiyorsak, System.Globalization namespace’inde yeralan CompareInfo sınıfı’nın IndexOf method’unu kullanabiliriz;

using System.Globalization;

string degisken1 = "Uygulamalarımızın olmazsa olmaz unsurları değişkenlerdir";
string degisken2 = "OLMAZ";

CompareInfo karsilastirma = CultureInfo.InvariantCulture.CompareInfo;
int i = karsilastirma.IndexOf(degisken1, degisken2, CompareOptions.IgnoreCase);

string ve String farkı

MSDN’deki String sınıfı ile alakalı bir sayfadan alıntı;

“The keyword string is simply an alias for the predefined class System.String.” – C# Language Specification 4.2.3

Türkçesi;

“string anahtar kelimesi basitçe, System.String sınıfının takma adıdır.” – C# Language Specification 4.2.3

Sql Server 2008’de sıkıştırılmış yedek alma (compressed backup)

17 November 2009 10 yorum

Sql Server 2008 ile birlikte gelen güzel bir yenilikten bahsetmek istiyorum, backup sırasında sıkıştırma (backup with compression).

Bu özelliği test etmek için, Sql Server 2008 R2 kurulu makinama AdventureWorks 2008R2 veritabanını yükledim.

Yükleme işleminden hemen sonra, şu sql cümlesi ile veritabanının backup’ını aldım;

BACKUP DATABASE
  AdventureWorks2008R2
TO DISK = 'C:\EnginPOLAT\AdventureWorks2008R2_Backup.bak'
WITH
  NOFORMAT,
  INIT,
  SKIP,
  NOREWIND,
  NOUNLOAD,
  STATS = 10

Karşılaştırma yapabilmek ve COMPRESSION anahtar kelimesini denemek için, bir de şu sql cümlesi ile yedek aldım;

BACKUP DATABASE
  AdventureWorks2008R2
TO DISK = 'C:\EnginPOLAT\AdventureWorks2008R2_Backup.bak'
WITH
  COMPRESSION,
  NOFORMAT,
  INIT,
  SKIP,
  NOREWIND,
  NOUNLOAD,
  STATS = 10

Gördüğünüz gibi, sıkıştırma özelliğini kullanmak için, backup script’inin options parçasına (WITH anahtar kelimesinden sonra gelen kısım), COMPRESSION anahtar kelimesini eklemek yeterli.

Şimdi gelelim karşılaştırmalara;

Orjinal boyut : 200.192 KB (Data) + 38.912 KB (Log)

Backup işlemi (Normal) sonucu oluşan dosya : 186.461 KB

Backup işlemi (Compression) sonucu oluşan dosya : 44.507 KB

Normal backup’a göre sıkıştırma oranı : %77

Backup alma süreleri açısından karşılaştırma,

Backup işlemi (Normal) : 7.505 saniye (24.018 MB / saniye)

Backup işlemi (Compression) : 4.521 saniye (39.862 MB / saniye)

Hız artışı : %40

Ne yazık ki, CPU kullanım oranlarını ölçemedim. Eğer ölçebilen varsa, yorumlarınızı duymak isterim.

MSDN’de yeralan şu sayfada yazdığına göre, backup işlemine compression eklemek, CPU kullanımında önemli bir artışa yol açarmış.

Varsayılan olarak alınacak tüm backup’larda sıkıştırma özelliğini açmak istersek;

EXEC sp_configure 'backup compression default', '1';
RECONFIGURE WITH OVERRIDE

script’ini çalıştırmak yeterli.

Kaynak : Technet, MSDN