EF Core 5 Preview 3 (#Benchmark and Performance Testing)

--

23 Nisan sabahı kahvemi yudumlarken, arka planda çalan keman dinletisi eşliğinde, gün içerisinde tamamlamam gereken görevleri ve daily meeting için gerekli hazırlıklarımı yapıyordum. Saatin henüz erken olduğunu görünce günlük rutinlerimden biri olan blog okumalarıma başladım ve Kasım ayında yayınlanması beklenen .Net 5’in Preview 3 versiyonun yayınlandığını gördüm.

Meraklı ve heyecanlı bir şekilde, paylaşılan dökümanları okumaya başladım, ilk izlenimim doğrultusunda edindiğim sonuçlar şunlar oldu;

  • Bu yayın ile birlikte Asp.Net Core ve EF Core Preview 3 versiyonuna kavuşmuştu.
  • Asp.Net Core’da HTTP/2 için performans iyileştirmelerine yer vermişlerdi.
  • .Net 5 ile ilgili paylaştığım bir önceki yazımda bahsettiğim özelliği eklediklerini görünce, eklenen bu özellik ile ilgili daha detaylı bir araştırma başlatmam gerektiğini hissettim. Bu özellik Include içerisine condition yazmaktı.

.Net 5 ile ilgili bir önceki yazıma buradan ulaşabilirsiniz.

Eklenen bu feature SQL tabanlı olunca, aklıma ilk gelen soru; performansı nasıl olacak ? oldu. Tabi merak ettiğim bir diğer konu ise nasıl bir SQL sorgusu üretileceği.

Aklımdaki bu soruları deneme yapmadan öğrenemiyeceğimi anlayınca hemen TODO listeleme ekledim ve önceliğini diğer işlerime nazaran biraz fazla verdim, çünkü daily meeting saati gelmişti. :)

Mesai bitiminin hemen ardından, kahvemi alıp, yeni bir proje üzerinde bu özelliği deneyimlemek istedim.

İlk olarak Nuget üzerinden EF Core 5 Preview 3 versiyonu projeme dahil ederek çalışmama başladım.

Install-Package Microsoft.EntityFrameworkCore -Version 5.0.0-preview.3.20181.2

Testlerimi gerçekleştirmek için Category ve Product isimli iki adet entity oluşturduktan sonra DbContext içerisinde gerekli tanımlamalarımı yaptım.

DbContext nesnemi hazırladıktan sonra Add-Migration diyerek arkama yaslanıp derin bir nefes aldım. :)

Testlerimi 4 farklı yöntem ile gerçekleştirdim:

  • AutoMapper Projection
  • Include Filter EFCore5
  • Non Filter Include
  • Manual Projection

Gerekli hazırlıkları yapmıştım, meraklı bir şekilde F5 yaptım ve yüzümde küçük bir tebessüm belirdi. :)

Sonuç 1

Yeni eklenen bu özellik ilk aşamada oldukça performanslı gözüküyordu.

Bu sonucu aldıktan sonra veri sayısını arttırdım ve tekrar test ettim.

Veri miktarı arttıktan sonra

Veri sayısı arttıktan sonra Include EF Core birinci sıradan üçüncü sıraya düşmüştü ancak çok büyük bir fark olmadığını siz de gözlemleyebilirsiniz.

Testlerimi gerçekleştirirken sorgularımı ürünlerin isimlerine göre oluşturmaktaydım, günlük hayatta böyle bir sorgu üretiliyorsa, performans odaklı olarak index tanımlamaları yapılacağını düşündüm ve DbContext içerisinde tanımlamalarımı yaptıktan sonra tekrar testlerime devam ettim.

Index tanımlandıktan sonra

Performans olarak ikinci sıraya yükselmişti, birinci sırada ise manuel projection yer alıyordu.

Memory kullanımı olarak bence fena değil, auto mapper ile kıyaslayınca oldukça başarılı gözüküyor.

Nasıl bir sorgu üretildiğini de gösterdikten sonra kişisel yorumlarımı yaparak yazımı sonlandıracağım.

Generated Query

Performans, memory kullanımı, kod okunabilirliği gibi kavramları göz önünde bulundurduğumda eklenen bu yeni özellik günlük hayatta kullanabileceğim bir seviyede diyebilirim.Siz de kendi sorgularınızı bu şekilde test edip, herhangi bir yöntemi seçebilirsiniz.

Yazımı Sayın Burak Selim Şenyurt hocamın bir cümlesi ile bitirmek isterim.

“Senior Softwore Developer olarak çalışıyorum ancak her sabah Junior olarak uyanıyorum.”

Junior olarak uyandığımız diğer günlerde görüşmek üzere.

Hepiniz #EvdeKal’ın.

Kaynaklar

--

--

Furkan Güngör
Devops Türkiye☁️ 🐧 🐳 ☸️

Solution Developer — I want to change the world, give me the source code.