22 Aralık 2013 Pazar

Entity Frame Work Vs Ado.Net Performans Testi

Merhabalar  bu yazımda sizlere Ado.net ile Entity Frame Work data akışı ile ilgili yaptığım performans testini sunmak ve işleyiş hakkında kısa bilgi vermek istedim.
İsterseniz amacımızı ve sonucumuzu şu şekilde sıralayalım.
İşlem : Veritabanı ile verilerin gösterimi ve bu gösterim süresinde ele alıcıların davranış biçimleri ve performansı.
Amaç: Ne yapmalıyız? Ado.Net mi ? EF mi ?
Sonuç: Kime göre, neye göre  ama bana göre Ado.NET.
------------------------------------------------------------------------------------------------------------
Detay:  Kısaca bu tür duyulara neden kapıldığımı bilmiyorum ama sürekli beynimin tam arkasında
Ado.Net vs EF
(yani yan taraftaki dönen kafa tası gibi) sürekli bu tür sorular ve öneriler dolaşmakta. MVC ile daha ünlenen ve daha rahatmış gibi görünen EF bize elbette çok fazla imkan sağlamakta yalnız baktığımız zaman kolay kullanımın istenmeyen tarafları da her zaman mevcut. Bu yüzden Ado.Net ile EF karşılaştırmasını yapma ihtiyacı duydum. İsterseniz Avantajları ve dezavantajları şu şekilde sıralayalım.
Ado.Net kullanırım çünkü;

  1. Hızlı (zaten bu bana yeter :))
  2. FrameWork 2.0 (System.Data.SqlClient) 
  3. Metotları istediğim derinlikte işleme ve düzenleme imkanına sahibim
  4. Kapalı kutu yapısından çıkıp kendi kod bloklarımı kendim kotarabilirim.
  5. Kendimi Programcı gibi hissederim
Ado.Net Kullanmam çünkü;

  1. Kod bloklarını yazmak  zordur,
  2. Kontrol ve kotarımı zordur
  3. Değişikleri yansıtmam hem database hemde class tarafına  zordur
  4. Bu ne ya bu kadar kod yazılır mı!!! tepkisi  her zaman vardır.
EF Kullanırım çünkü;

  1. Ohhh rahat ve kullanımı çok basit
  2. Classlarımı oluştururum modellerimi çıkartırım
  3. Metotlar hazır ve her yerde belirli tanımlamalara sahip.(Update,Add,SaveChanges vs)


EF Kullanmam çünkü;

  1. Hız açısından Ado.Net ile karşılaştırılınca daha düşük performans sunmaktadır.
  2. ObjectQuery<T> ile tiplerimi cast etmesi ve return etmesi durumu biraz zorlaştırmakta.
  3. Tam refere edilen bir nesneye ilk datayı parse etmektense gelen küme içerisinden parse durumu söz konusu olmakta.

--------------------------------------------------------------------------------------------------------
Neyse lafı daha uzatmadan ve teknik terimlerle boğulmadan yaptığımız örneği ve performansları şu şekilde paylaşalım.

Bu test uygulamada .Net 4.0 seçildi.
Veri tipleri:VarBinnary(Tsql) ,NvarChar(Tsql)
CommandType:StroreProcedure
MetotType:Select Top 100
Beklenti: Hangi tür işlem daha performanslı
Result: Aşağıdaki gibi :)

1. aşama :)

2.  aşama ve ADO.NETTTTTT 


3. aşama EF üzgünüm :(((



sonuçlar ortada anlatmak ve göstermek istediğim bu örnekte bilerek Veritabanına gömülmüş resimler üzerinde çalıştım takibi mantıklı mı değil mi buna işi yapan yanı kodu yazan karar verecektir. Mimari açıdan yaklaşımlarda mutlaka saniyelik requesteler göz önünde bulundurulmalıdır. Veritabanında resimleri tutumanın avantajları ve dezavantajlarınıda bir ara birlikte tekrar inceleyelim.

Saygı ve sevgilerimle Rahmi Tuğrul ALTIN
(MCSD)