Caner Tosuner

Leave your code better than you found it

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 !!

11. IEEE Türkiye Öğrenci Kolları Ve Gold Kongresi - Kıbrıs'2013

Sağdan akan trafik, devasa büyüklükte DAU kampüsü, inanılmaz sıcaklık, mercedes taksiler ve yavru vatan kıprıs :)

Yaklaşık 2 ay önce davetini aldığımız 11. IEEE Türkiye Öğrenci Kolları Ve Gold Kongresine Üniversitemizde 10 yıldır faliyet gösteren IEEE Student Branch ekibinden 4 arkadaşla birlikte ve Üniversitemizden aldığımız her türlü maddi manevi destekle katılma fırsatımız oldu. Konferans salonları, konaklama, ulaşım, yemek vs. gibi bütün ihtiyaçlar Doğu Akdeniz Üniversitesi IEEE Student Branch ekibi tarafından organize edildi ve Türkiye'de bulunan çeşitli üniversitelerden katılan yaklaşık 200'e yakın öğrencileri en iyi ve güzel şekilde ağırladılar. Kadir Has Üniversitesi olarak kongre boyunca çeşitli oturumlar, workshop'lar, ve başta IEEE Türkiye temsilcisi olmak üzre birçok seçim ve oylamalara katıldık. Farklı üniversitelerden katılan birçok kişiyle tanışma fırsatımız oldu ve belkide bir daha hiç bozulmayacak arkadaş ilişkileri kurulmuş oldu. 

 

Malum Kıbrıs'ta olduğumuzdan havanın ne derece sıcak olacağını daha gitmeden önce tahmin etmiştik ama inanın ne tahmin etmişsek 2 katı çıktı. İnanılmaz bir sıcaklık vardı ve klima gördüğümüz anda sanki define bulmuş gibi sevinmiştik :)

Üniversite Gazimağusa daydı ve bizde DAU Yurt 4'de konakladık. Kampüs inanılmaz derecede büyük ve yürüyerek bir yere gidilmesi oldukça zordu bizde herkesin yaptığı gibi taksiyle her yere gidip geldik. Ücret olarak fena değil gibi 4-5 kişi bindiğinizde kişi başı max 3 TL gibi ücret ödüyorsunuz.Yemek konusu biraz sıkıntılıydı pek bizim alışık olduğumuz gibi değildi, deniz kum & güneş 3'ü 1 arada muhteşemdi :) Son gün Girne'ye gittik ve orada bulunan savaş zamanından kalma birkaç müzeyi gezdik,

 Ve daha nicesi..