Aslında daha fazla abilitysi yani daha fazla şey yapabilme özelliği olan her şey; daha az şey yapabilen şeylere göre daha yavaştır demek çok da yanlış olmaz diye düşünüyorum. Class, sealed class vs'den bağımsız olarak; X ve Y iki farklı yapı düşünelim. Hangisinin daha fazla özelliği varsa; diğeri daha hızlı olacaktır. Mesela Record yapısı da buna bir örnek olabilir. Mutable, immutable yapılar vb. Tabi yavaş veya hızlı olmasından bağımsız olarak; asıl olan doğru şeyi, doğru yerde kullanmaktır.
Hocam selamlar öncelikle değerli paylaşımın için teşekkür ederim. Benchmark sonuçlarını hesaplarken Calculate methodlarının birisi toplama birisi çarpma işlemi olarak kaldı. İkisinide aynı işlem(çarpma) olarak alındığında aradaki fark daha net gözüküyor. Bendeki sonuçlar aşağıdaki gibi: NonSealedClassBenchmark | 0.4774 ns SealedClassBenchmark | 0.0264 ns Arada yaklaşık 18 kat fark var. Dikkate değer bir fark çıkıyor. Emeğiniz için teşekkür ederim.
Selam 3:12 de söylenenlere ek olarak ; Student referensını gösteren human nesnesi human kodunu,direk referans nesne eşleşmesi olanlar da kendilerine ait olanları çağırır. Virtual da gösterdiği asıl nesne ne ise onu çağırır. public class Program { public static void Main() { Human human=new Human(); human.Talk(); //Human talks Student student=new Student(); student.Talk(); //Student talks Human humanStudent=new Student(); humanStudent.Talk(); //Human talks (Eğer virtual ile override edilseydi Student talks basacaktı.)
} } public class Human { public void Talk() { Console.WriteLine("Human talks"); } } public class Student:Human{ public void Talk() { Console.WriteLine("Student talks"); } }
@@rcpsntrk işin içine inheritance girdiğinde, o virtual metodlar bir şekilde override edildiğinde işin rengi değişirdi. İşte bu tarz durumlar haricince sealed tarafındaki bahsettiğim devirtualization giriyor işin içine.
Methodların ikiside çarpma ve virtual olmadığında; NonSealedClassBenchmark | 0.0107 ns | 0.0157 ns | 0.0140 ns | 0.0022 ns SealedClassBenchmark | 0.0253 ns | 0.0319 ns | 0.0467 ns | 0.0000 ns Eğer ki override ihtiyacımız varsa; sealed yapamayız. Sealed yaptığımızıda miras veremeyiz. Birbirinin alternatifi gibi bir durumda olmadığı için bu şekilde karşılaştırılmasının pek bi mantığı yok aslında. Çünkü ben ihtiyaç olmadığında ne sealed yapıyorum, ne virtual. Durup dururken niye virtual yapalım? Niye sealed yapalım? Yada çok büyük bir noktayı gözden kaçırıyorum şuanda :)
Üstat, virtual olduğu için yavaş oluyor büyük ihtimal. Sealed olmasının pek bir önemi yok sanıyorum. Sealed classtan türeme olmuyor, haliyle override ihtimali de olmuyor. Haliyle virtual da olamıyor. Sonuç olarak virtual classa ihtiyacım varsa sealed de kullanamayacağım için..... NonSealedClass da metod virtual olmasa bu kadar fark olmaz diye düşünüyorum. Deneyip tekrar yazarım. Selamlar.
Aynen tahmin ettiğim gibi; projeyi sizin repodan indirip, iki metodu da çarpma yaptığımda ve virtualı sildiğimde... Bu teste göre; SEALED olan iki kat DAHA YAVAŞ. NonSealedClassBenchmark | 0.0107 ns | 0.0157 ns | 0.0140 ns | 0.0022 ns SealedClassBenchmark | 0.0253 ns | 0.0319 ns | 0.0467 ns | 0.0000 ns
Böyle niş konuları öğrenmek çok keyifli oluyor hocam, teşekkürler.
Teşekkürler :)
Aslında daha fazla abilitysi yani daha fazla şey yapabilme özelliği olan her şey; daha az şey yapabilen şeylere göre daha yavaştır demek çok da yanlış olmaz diye düşünüyorum. Class, sealed class vs'den bağımsız olarak; X ve Y iki farklı yapı düşünelim. Hangisinin daha fazla özelliği varsa; diğeri daha hızlı olacaktır. Mesela Record yapısı da buna bir örnek olabilir. Mutable, immutable yapılar vb. Tabi yavaş veya hızlı olmasından bağımsız olarak; asıl olan doğru şeyi, doğru yerde kullanmaktır.
Hocam selamlar öncelikle değerli paylaşımın için teşekkür ederim.
Benchmark sonuçlarını hesaplarken Calculate methodlarının birisi toplama birisi çarpma işlemi olarak kaldı.
İkisinide aynı işlem(çarpma) olarak alındığında aradaki fark daha net gözüküyor. Bendeki sonuçlar aşağıdaki gibi:
NonSealedClassBenchmark | 0.4774 ns
SealedClassBenchmark | 0.0264 ns
Arada yaklaşık 18 kat fark var. Dikkate değer bir fark çıkıyor. Emeğiniz için teşekkür ederim.
Ben de videodan sonra farkettim durumu, değiştirip tekrar test ettim. Benzer sonuçlar çıktı :)
Təşəkkürlər hocam
Çok çok teşekkürler. Kısa net öz bir paylaşım oldu. Faydalandım. Emekleriniz ve zaman ayırdığınız icin tekrar tesekkur ve tebrik ederim.
Teşekkürler :)
Helper classlarımızı sealed olarak tanımlamak mantıklı geldi. Bu videoyu izledikten sonra.
Mantıklı
Hocam programlamada ilk senem ve her gün, böyle de mi bir şey varmış diye şaşırıyorum :)
Daha neler var neler :)
@@TechBuddyTR severek takip ediyorum hocam. Notumu alıyorum, deniyorum deniyorum ta ki yapana kadar. Emeğinize sağlık hocam
Selam
3:12 de söylenenlere ek olarak ;
Student referensını gösteren human nesnesi human kodunu,direk referans nesne eşleşmesi olanlar da kendilerine ait olanları çağırır.
Virtual da gösterdiği asıl nesne ne ise onu çağırır.
public class Program
{
public static void Main()
{
Human human=new Human();
human.Talk(); //Human talks
Student student=new Student();
student.Talk(); //Student talks
Human humanStudent=new Student();
humanStudent.Talk(); //Human talks (Eğer virtual ile override edilseydi Student talks basacaktı.)
}
}
public class Human
{
public void Talk()
{
Console.WriteLine("Human talks");
}
}
public class Student:Human{
public void Talk()
{
Console.WriteLine("Student talks");
}
}
NonSealedClass'taki methodu virtual tanımlamasaydık nasıl bir sonuç alırdık?
Muhtemelen çok daha yakın sonuçlar alırdık birçok case de
@@TechBuddyTR O zaman hız farkı sealed tan değilde virtualdan kaynaklanmış olmuyor mu?
@@rcpsntrk işin içine inheritance girdiğinde, o virtual metodlar bir şekilde override edildiğinde işin rengi değişirdi. İşte bu tarz durumlar haricince sealed tarafındaki bahsettiğim devirtualization giriyor işin içine.
Methodların ikiside çarpma ve virtual olmadığında;
NonSealedClassBenchmark | 0.0107 ns | 0.0157 ns | 0.0140 ns | 0.0022 ns
SealedClassBenchmark | 0.0253 ns | 0.0319 ns | 0.0467 ns | 0.0000 ns
Eğer ki override ihtiyacımız varsa; sealed yapamayız. Sealed yaptığımızıda miras veremeyiz. Birbirinin alternatifi gibi bir durumda olmadığı için bu şekilde karşılaştırılmasının pek bi mantığı yok aslında.
Çünkü ben ihtiyaç olmadığında ne sealed yapıyorum, ne virtual. Durup dururken niye virtual yapalım? Niye sealed yapalım?
Yada çok büyük bir noktayı gözden kaçırıyorum şuanda :)
Galiba Sealed kullanmamaya devam edeceğiz. Güzel video
Kullanabiliyorsak kullanalım :)
@@TechBuddyTR 🤣🤣
Eline sağlık
Teşekkürler :)
Hocam iki class altındaki işlemler farklı oldu. Biri çarpma diğeri toplama. Bunun sonuca etkisi var mıdır?
Çarpma toplamadan bir tık daha karışık bir işlem. Video bittikten sonra farkettim düzelttim fark iyice açıldı 🤣
Üstat, virtual olduğu için yavaş oluyor büyük ihtimal. Sealed olmasının pek bir önemi yok sanıyorum.
Sealed classtan türeme olmuyor, haliyle override ihtimali de olmuyor. Haliyle virtual da olamıyor. Sonuç olarak virtual classa ihtiyacım varsa sealed de kullanamayacağım için.....
NonSealedClass da metod virtual olmasa bu kadar fark olmaz diye düşünüyorum. Deneyip tekrar yazarım. Selamlar.
Aynen tahmin ettiğim gibi; projeyi sizin repodan indirip, iki metodu da çarpma yaptığımda ve virtualı sildiğimde...
Bu teste göre; SEALED olan iki kat DAHA YAVAŞ.
NonSealedClassBenchmark | 0.0107 ns | 0.0157 ns | 0.0140 ns | 0.0022 ns
SealedClassBenchmark | 0.0253 ns | 0.0319 ns | 0.0467 ns | 0.0000 ns
Güzel bir yayın daha, teşekkür ederiz
Teşekkürler :)