ADO.Net Entity Framework Hız Testi

Bu makalede local'de bulunan northwind database'ine bağlanarak Customers tablosunda bulunan müşterileri hem ADO.Net hem de Entity Framework kullanarak alıp array içerisine atacağız ve iki işlem arasındaki hız farkını ölçmeye çalışacağız.

 

Entity Framwork'ün developerlara ne derece kolaylık sağladığını biliyorsunuzdur.Normal şartlarda ADO.Net kullanarak ortalama 20 satır kodla yaptığınız işlemleri Entity Framework ile %60 daha az kod yazarak yapabiliyoruz. Düşünüldüğü zaman inanılmaz bir durum ve zamandan kazanç sağlamak için muhteşem bir mimari. Bende aynen böyle düşünüyordum taki aradaki hız farkının en kötü şartlarda bile 3 kattan daha fazla olduğunu öğrenen kadar. Gelin aşağıda örneğimizi inceleyerek devam edelim. 

 

Öncelikle Northwind database'inde bulunan Customers tablosunun colonlarını aşağıda olduğu gibi classlaştırıyoruz

public classCustomer
    {
        public int CustomerID { get; set; }
        public string CompanyName { get; set; }
        public string ContactName { get; set; }
        public string ContactTitle { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public string Phone { get; set; }
    }

 

Sonrasında ADO.Net ile database'de kayıtlı bulunan müşterilerin bilgilerini alıp Customer objesinden bir List array'in içerisine dolduruyoruz,

public List<Customer> GetCustomers_By_ADO()
{
List<Customer> AllCustomers = newList<Customer>();
 
SqlConnection conn = newSqlConnection("Server=CT;database=Northwind;trusted_connection=True");
SqlCommand cmd = newSqlCommand("select * from Customers", conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
AllCustomers.Add(newCustomer()
{
CustomerID = dr.GetString(0),
CompanyName = dr.GetString(1),
ContactName = dr.GetString(2),
ContactTitle = dr.GetString(3),
Address = dr.GetString(4),
City = dr.GetString(5),
Country = dr.GetString(8),
Phone = dr.GetString(9),
});
}
return AllCustomers;
 }

Şimdi ise aynı işlemi Entity Framework kullanarak yapıyoruz,

NorthwindEntities db = newNorthwindEntities();
public List<Customers> GetCustomersBy_EF()
{
List<Customers> AllCustomers = newList<Customers>();
AllCustomers = db.Customers.ToList();
return AllCustomers;
 }

Bakıldığı zaman ADO.Net ile yaklaşık 25 satırda yaptığımız işlemi Entity Framework ile 7 satırda hallediyoruz. Şimdi gelelim Hız testimize. Bir adet WebForm ekliyoruz ve içerisine aşağıdaki kodları yazarak testimizi yapıyoruz.

 

İlk olarak ADO.Net hızını test ediyoruz,

Stopwatch sw2 = newStopwatch();
sw2.Start();
Customer c1 = newCustomer();
c1.GetCustomers_By_ADO();
sw2.Stop();
string result2 = sw2.ElapsedMilliseconds.ToString();
Response.Write(result2 + " ms.");

 

 Şimdi Entity Framework kullanarak testimizi yapalım,

Stopwatch sw1 = newStopwatch();
sw1.Start();
Customer c = newCustomer();
c.GetCustomersBy_EF();
sw1.Stop();
string result = sw1.ElapsedMilliseconds.ToString();
Response.Write(result);

 

Sonuçlar Nasıl Mı ?

 

Ado.Net ile yapılan işlem;

Entity Framework ile yapılan işlem;

 Görüldüğü üzre aradaki fark neredeyse 7 kattan daha fazla.Bunun nedenine gelecek olursak, ADO.Net ile yapılan her bir sorguda istenilen türdeki obje 1 defa generate edilirken Entity Framework ile yapılan her bir sorgu için entity'niz sürekli generate edilir ve bu projeniz için çok yüksek oranda bir performans kaybına neden olur. Bu fark küçük çaplı projelerde belki göz ardı edilebilir ancak eğer ki proje gayet kapsamlı ve büyük bir projeyse inanılmaz derecede bir hız farkı ortaya çıkarmaktadır.

 

Son söz olarak ; ADO Candır !!

Add comment