[Performance] Sınıf İlklemenin En İyi Yolu Nedir?

Kod geliştirirken en çok kullanılan kavram sınıflar (class) ve bu sınıfların içerisindeki özellikler (properties).

Sınıfları ilklerken (initialize) bir çok yöntem kullanılabilir, ancak bunlardan en performanslısı hangisi?

Varsayılan kurucu kullanma ve sonrasında özelliklere değer atama.

Bu yöntem en eskiden beri gelen nesne ilkleme yöntemlerinden biri. Bu yöntemde öncelikle varsayılan kurucu ile nesne oluşturuluyor ve sonrasında her bir özellik tek tek çağrılarak değerleri atanmış olur.

Varsayılan kurucu ve liste ilkleme yöntemi.

Bu yeni yöntemlerden biri. Varsayılan kurucuyu çağırdıktan sonra sanki sınıfımız bir listeymiş gibi kıvırcık parantezlerin içerisinden sınıfın özellikleri çağrılıyor.

Yüklenmiş kurucu kullanımı.

Bu yöntem bilinen yöntemlerden biri ve aslında bir sınıf kullanılacağı zaman bu bilgilerin zorunlu olduğunu belirtmek için kullanılan yöntemlerden biri. Sınıf kurucusu çağrılır ve parametre olarak değer ataması yapılacak olan alanlar gönderilir.

Sınıf Özelliklerinin İlklenmeye Etkisi

C++ ve Java geliştirirken kullanılan okuyucu (getter) ve atayıcı (setter) methodlar C# dilinde özellik olarak (property) tek bir yapıda birleştirilmiş oluyor. Özellikleri oluşturmanın tek yolu daha önceleri sınıf üyelerini kullanmak olsa da artık bu üyeleri kullanmadan da özellik tanımlaması yapılabiliyor.

Eski Yöntem Yeni Yöntem

Eski şekilde özellik tanımlamak için daha fazla klavye hareketi gerektiği bir gerçek. Yeni yöntem daha az klavye hareketinin yanında daha kolay bir kod okuma (readability)  kolaylığı kazandırdığını görmezden gelmek imkansız.

Eski Yöntem Yeni Yöntem

Ancak işi biraz daha düşük seviyelere götürdüğümüzde iki kod satırı için farklı işlemler yapıldığını görüyoruz. Bu fark uygulama çalışırken performansı etkileyecek ölçüde olabilir. Bunu anlamanın en iyi yolu ufak bir uygulama geliştirip bunu test etmek ve süreleri görmek.

Test

Yöntem Yetkinlik Matrisi

Test için öncelikle 6 bir birine benzer ancak sıralama olarak farklı olduğu düşünülen yöntem belirlendi. Bu yöntemlerle 1 milyon tane nesne oluşturulması ve bunlara değerlerin atanması sağlandı. Bu işlem istatistik olarak daha iyi sonuç almak için 50 kere tekrarlandı. Proje kurulurken (build) kod optimizasyonu iptal edildi. Başka bir deyişle kod üzerinde framework tarafından yapılacak iyileştirmeler devre dışı bırakılmış oldu.

Nesne Kurma Sonuçları

Sonuç Tablosu Optimizasyon Olmadan

Sonuç Tablosu Optimizasyon Olmadan

Sonuç Tablosu Optimizasyonlu

Sonuç Tablosu Optimizasyonlu

Test ortamını düzenleyip projede kod optimizasyonu etkin hale getirince bazı sayıların düştüğün görmek sevindirici olsa da bazı sayılarında yükseldiğini görmek gerçekten optimizasyonu framework’ ün yapıp yapmadığı konusunda kafamda soru işareti belirdi.

Hızlıca sonuçları yorumlayacak olursak 6. yöntemin her iki durumda da en iyi seçenek olduğunu söyleyebiliriz. Ancak burada dikkat edilmesi gereken ufak ayrıntı; liste tarzı özelliklere değer atamanın çok büyük bir fark yaratmadığı. Buna ek olarak eski usul özellikler için ayrı bir sınıf üyesi oluşturmanın ciddi anlamda fark yarattığını görebilirsiniz.

 

Yorumlayın