|
Unutmayayım diye yazdıklarım... |
Struct'dan haberdar olmanız yetmez, kullanmanız gerekir11.01.2010 tarihinde oğuzhan tarafından yazıldı.Yazılım geliştirirken bizi sırtlayan programlama çatısının özelliklerini tek tek ve çok ayrıntılı bilmemiz her zaman mümkün olmuyor, fakat bazı özellikler var ki hem geliştirilen programın kalitesini, hem de performansını büyük ölçüde etkileyebiliyor. Bu etkiyi C# programlama dilinde yaratabilecek özelliklerden bir tanesi de Struct (Yapı) veri tipidir ve konuda budur.Bilindiği gibi Struct ile yapılabilen her işlemi ve daha fazlasını Class ilede yapılabiliyor. Peki neden Struct kullanalım? diye sorabilirsiniz. Aşağıda bu sorunun cevabını kendi tecrübelerime dayanarak vermeye çalıştım.
Tabi Struct'ı her zaman kullanacağız diye bir şey yok, sadece işimize geldiği zaman kullanalım. Bazı durumlarda da aşağıdaki nedenlerden dolayı hiç kullanmamalıyız.
Struct'lar neredeyse her yönü ile Class'lara benzerler yalnız class'lardan biraz daha kısıtlıdır ama daha da hızlıdır. Yukarıdaki maddeler size nerede struct kullanmanız gerektiği hakkında az çok fikir verebilir ama doğru karar vermeniz için tecrübeniz olması gerekir çünkü bu meslekte tecrübe herşeydir ;) Class ve Struct'ı basitçe karşılaştırıp aradaki farkı performans açısından ele almak için basit bir test programı hazırladım bakalım sonuç nasıl çıkacak.? class Program { class clsHayvanlar { public string a { get; set; } } struct srtHayvanlar { public string a { get; set; } } static void Main(string[] args) { string tmp_ = string.Empty; Stopwatch s1 = new Stopwatch(); s1.Start(); List for (int i = 0; i < 1000000; i++) { cls_list.Add(new clsHayvanlar() { a = "value" });// Heap bellek bölgesinde yer ayrılıyor. tmp_ = cls_list[i].a; // Heap bölgesinden okunuyor. } s1.Stop(); Console.WriteLine("class\t: {0:N2}",s1.ElapsedMilliseconds); Stopwatch s2 = new Stopwatch(); s2.Start(); List for (int i = 0; i < 1000000; i++) { str_list.Add(new srtHayvanlar() { a = "value" }); // Stack bellek bölgesinde yer ayrılıyor. tmp_ = str_list[i].a; // Stack bölgesinden okunuyor. } s2.Stop(); Console.WriteLine("struct\t: {0:N2}",s2.ElapsedMilliseconds); } } ----------------- class : 232,00 ms struct : 90,00 ms Görüldüğü gibi Struct lehine bariz fark var ama bu durumun tam tersi olduğu zamanlarda olabiliyor tabi bu ayrı bir yazı konusu. Ben genelde Struct'ı dağınık verileri toparlamak, çoğu zamanda yeni bir veri türü oluşturmak için kullanıyorum, gerisi zaten GC'a ve Framework'e kalıyor. Genelde kullandığım yapı aşağıdaki gibi. Yeni bir veri türüne ihtiyacım varsa bu türü yaratırken Struct kullanmam işimi fazlasıyla görüyor. class Program { static List static void Main(string[] args) { d_list = new List foreach (var item in Directory.GetFiles(".\\")) { d_list.Add(new sistem_dosyasi( new FileInfo(item))); } } struct sistem_dosyasi { public long size; public string name; public sistem_dosyasi(FileInfo fi) { this.size = fi.Length; this.name = fi.Name; } } } |
En çok ilgi görenler... HP IPAQ 914c Rastgele birşeyler... TBY İzmir Buluşması ... Şebeke WHT, Fıroİş, Denizİş, Serkan, Semih, Sewgi, Beşir, İzgençvos, Erkan, Mumin, Aliİş, Lütfü, Alper, Yusuf |
|
2003 - Oğuzhan YILMAZ Web Hosting Sponsor Vargonen Technologiies |