.NET Framework Beta 2 – Dynamic Language Runtime Performans İncelemesi
Merhaba ArkadaÅŸlar,
Bu yazımızda daha önce sürekli bahsettiÄŸimiz ama bir türlü somut verilerle gözlemlemediÄŸimiz Dynamic Language Runtime’ın performansına göz atıyor olacağız. BildiÄŸiniz gibi DLR içerisinde bulunan Call Site Caching mekanizması bizim yaptığımız dinamik çaÄŸrımları içerisinde cacheleyip ileriki çaÄŸrımlarda kodun daha hızlı iÅŸletilmesini saÄŸlamakta. Biz de bu yazı boyunca DLR’ın içerdiÄŸi çeÅŸitli mekanizmalar üzerinde yaptığımız dinamik çaÄŸrımları gözlemleyeceÄŸiz ve Call Site Caching’in aslında ne kadar faydalı olduÄŸunu somut veriler ile bir daha anlayacağız.
Object Binder
Object Binder mekanizmasını test ederken karşılaştırma yapacağımız yöntem reflection mekanizması olacak. Arka arkaya hem dinamik hem de reflection kodlarını işleteceğiz ve her bir kodun işletilmesi ne kadar sürüyor bunu gözlemleyeceğiz.
Test için öncelikle basit bir Foo sınıfı tasarlayacağız ve içerisine bir property bir de bu propertyi ekrana yazan bir metot ekleyeceğiz. Daha sonra ise bu propertyi hem dinamik hem de reflection ile değiştirip sonra yine bu iki farklı mekanizma ile metot çağrımını gerçekleştireceğiz.
Kodlar ise ÅŸu ÅŸekilde olacak.
class Foo   Â
{ Â Â Â Â Â Â
  public string MyProperty { get; set; }
  public void Print()
  {
    HttpContext.Current.Response.Write(“<br/>MyProperty = “ + MyProperty);
  }
}
Daha sonra ise Test metotlarını yazıyoruz.
Gördüğümüz gibi DLR sadece ilk çağrımda çeşitli çözümlemeler yaptığından dolayı fazla zaman harcamaktadır. Ancak yapılan diğer çağrımlarda reflectiona oranla çok daha hızlı bir şekilde kodun işletilmesi söz konusu olmaktadır.
Javascript Binder
Test yapacağımız bir diğer platform ise Silverlight olacak. Bu sefer kodlarımızı hem javascript hem de dinamik olarak C# tarafında yazacağız ve işletim sürelerini inceleyeceğiz. Çalıştıracağımız kodda yine basit olarak result isimli div elementi içerisine 100 kere string değerler ekleyeceğiz.
Kodlar ise ÅŸu ÅŸekilde olacak
Javascript Kodları :
Daha sonra bu kodu C# tarafından hem dinamik olarak hem de window.Invoke yardımcı metoduyla çağırıyoruz.Â
Çıkan sonuçlar ise şu şekilde
Herşey ortada 
Not : Javascript tarafında hassas bir ölçüm yapamadığımdan dolayı aynı javascript kodunun dinamik olarak C# tarafında implemente edemedim. Javascript tarafında hassas ölçüm yöntemini araştırdıktan sonra RC sürümünde bu kullanımı da test edeceğim.
Sonuçlara baktığımızda Call Site Caching yapısının DLR içerisinde ne kadar da önemli bir görev üstlendiğini görüyoruz. Böylece yaptığımız dinamik işlemler ilk çağrım haricinde yine hızlı bir şekilde yürütülmekte.
Not : .NET Framework 4.0  şuanda Beta sürümünde olduÄŸundan dolayı performanstan çok istenilen iÅŸlemlerin yapılmasına odaklanılmış durumda. Ancak Beta’dan sonra çıkacak olan sürümlerin performans açısından çok daha iyi olacaktır. Zaten .NET Framework 4.0 release tarihi de performans çalışmalarından dolayı 12 Nisan’a ertelenmiÅŸ durumda. RC sürümün çıkmasıyla yukarıdaki testleri yeniden yapacağım ve sonuçları sizinle paylaÅŸacağım.
Yaptığım örnekleri siz de buradan indirip test edebilirsiniz.
Herkese bol .NET’li günler…Â
No Responses to “.NET Framework Beta 2 – Dynamic Language Runtime Performans İncelemesi”
RSS feed for comments on this post. TrackBack URL



