C#’da Entitiy Framework vs. ADO.NET Hız Karşılaştırması

Selamlar, bugün sizlere C# uygulamalarında teorik olarak Entitiy Framework’ün az koda rağmen yavaş çalıştığını biliyordum ancak birebir somut olarak da göstermek istedim ve Datagridview üzerinde veri listeleme işlemini Entitiy Framework ile ADO.NET’in hız performanslarını test ettim.
Aynı işlevi Entitiy Framework 2 satır ile yaparken ADO.NET 6 satır ile yapabiliyor.
Entitiy Framework ilk başlatmada daha yavaş çalışıyor; ancak program kapatılmadığı sürece sonraki veri işlemlerinde ADO.NET ile bir farkı yok gibi duruyor. ADO.NET ise hem ilk başlatmada hem de devam eden süreçlerde stabil şekilde oldukça hızlı listeliyor.
Peki bu farkın sebebi nedir?
Entity Framework’ün yavaş çalışmasının sebebi arka planda ilk çağrıda bağlantıyı oluşturma, modeli belleğe yükleme ve ORM mekanizmasını başlatma gibi işlemler yapmasından kaynaklanıyor. Daha sonra hızlı çalışmasının sebebi ise artık verilerin ön belleğe alınmasından kaynaklanıyor.
ADO.NET’in hızlı çalışmasının sebebi ise doğrudan SQL sorgularını çalıştırması ve ORM gibi bir soyutlama katmanı olmasıdır. Bu yüzden her zaman hızlıdır.
Eğer hız öncelikli ve ince ayarlar yapmak istiyorsanız ADO.NET doğru tercih olabilecekken sade bir kod tasarımı, uzun vadeli kullanım ve ileriye dönük ölçeklenebilirlik kullanılmak istenildiğinde ise Entity Framework bu durumda oldukça avantajlı.
ADO.NET Kullanımı
“BtnDersListesi” isimli ders listeleme butonun “Click” olayı gerçekleştiğinde çalışacak olan 6 satırlık kod parçası.
private void BtnDersListesi_Click(object sender, EventArgs e)
{
SqlConnection baglanti = new SqlConnection(@"Veri tabanı bağlantısı");
SqlCommand komut = new SqlCommand("Select * From TBL_DERSLER", baglanti);
SqlDataAdapter da = new SqlDataAdapter(komut);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
}
Entity Framework Kullanımı
“BtnOgrenciListele” isimli öğrenci listeleme butonun “Click” olayı gerçekleştiğinde çalışacak olan 2 satırlık kod parçası.
private void BtnOgrenciListele_Click(object sender, EventArgs e)
{
DbSinavOgrenciEntities db = new DbSinavOgrenciEntities();
dataGridView1.DataSource = db.TBL_OGRENCI.ToList();
}

Karşılaştırmaya Ait Kanalımdaki YouTube Videosu
Bu yazı ilk olarak Medium'da yayımlandı.