Performans için Struct ve Class Kavramları

Erkan Güzelküçük
Devbase
Published in
2 min readApr 12, 2020

Performanslı Web Uygulamaları geliştirirken dikkat edilmesi gereken bir çok nokta bulunmaktadır. Biz Struct ve Class kavramlarını inceleyeceğiz.

Hanny Naibaho‘nun “The Tunnel” isimli fotoğrafı Unsplash’ten alınmıştır.

Struct ve Class’lar birbirlerine benzer özellikler içermektedir. En önemli farklılıkları Memory üzerindeki davranışlarıdır. Struct bir Value Type, Class ise Reference Type’tır. Bu çok önemli bir detay.

Reference Type ve Value Type ile ilgili yazıma bu linkten ulaşabilirsiniz.

http://guzelkucuk.com/2020/03/18/object-reference-not-set-to-an-instance-of-an-object

Struct ve Class arasında Constructor farklılıkları da bulunmaktadır. Struct için Default Constructor oluşturulduğunda Derleyici Hatası alınır. Fakat parametrik bir Constructor tanımlaması yapılabilir. Class için Default Constructor engellemesi yoktur.

Class’lar kalıtım yolu ile başka bir sınıftan türetilebilirler. Struct’ta ise böyle birşey yapılamaz. Fakat Struct yapınıza Polymorphism uygulayabilirsiniz. Bu konularla ilgili paylaşacağım bazı forum tartışmaları bulunmaktadır.

https://stackoverflow.com/questions/2310103/why-c-sharp-structs-cannot-be-inherited

https://stackoverflow.com/questions/1222935/why-dont-structs-support-inheritance

New anahtar sözcüğü kullanılarak oluşturulan bir Struct nasıl bir çalışma sergiler örnekle inceleyelim.

Bu şekilde StructSample’ın instance’ı alındığında içerisinde bulunan property’lerin default değerleri atanmış olacaktır. Eğer New anahtar sözcüğü kullanılmasaydı, “Use of possibly unassigned field” hatası alacaktık.

Class’larda olduğu gibi instance alma zorunluluğu yok ama Struct’larda property’leri kullanabilmek için default değerleri tanımlanması gerekiyor.

Struct ve Class Ne Zaman Kullanılmalıdır?

Büyük boyutlara sahip datalarınız için Class kullanmanız daha mantıklıdır. Bunun nedeni Memory yönetimidir. Büyük boyutlu dataların Struct ile Stack’te tutulması performans kaybına yol açacaktır. Aynı şekilde Küçük boyutlara sahip datalarınız için Class kullanırsanız gereksiz yere Heap’i şişirmiş olursunuz. Bu performans açısından büyük bir etkendir.

Çok beğendiğim bir yazıyı paylaşıyorum incelemenizde fayda var.

http://clarkkromenaker.com/post/csharp-structs/

Sonuç

Bu basit görünen seçim bazen size çok fazla hafızaya mâl olabilir, bu yüzden akıllıca seçin!

--

--

Erkan Güzelküçük
Devbase

Software Architecture and Research Applications Development Team Leader at Koç University