IEnumerable ve IQueryable farklılıklarını ve kullanımını inceleyeceğiz, bu farklılık performans açısından projelerinize çok şey katacak.
Teorik olarak:
IQueryable, Database vb. veri depolarında yapılan sorgulamlarda işlevsellik sağlar.
IEnumerable, Bir koleksiyon üzerinde sorgulama yapmanıza olanak sağlar.
İşin ince ayrıntısı işte burada, IEnumerable data’yı çeker ve sorgulamanız var ise daha sonra bu işlemi gerçekleştirir. Data’yı Memory’de tutar ve kullanır.
Peki ya 1 Milyon datam var ise ? Vuuuuuuuuu !!!
Düşünsenize 1 Milyon data var ve IEnumerable ile sorgulama yapıyorsunuz
IEnumerable q = _context.UserList.Where(x=> x.Onay=1);
Yukarıdaki kodu çalıştırdığınızda aşağıdaki adımlar işliyor.
1. Memory IEnumerable için alan açıyor ve 1 Milyon datayı içine atıyor.
2. Memory’den o datalar Where ile sorgulanıyor. (Onay = 1 ifadesi sorgulanıyor)
IQueryable, Şartlara göre bir query oluşturur ve bu query ile birlikte database’e gider. O şartlara göre sonuç döner. Teorik olarak hızı farketettik bile 🙂
Yine de görelim;
Adım adım önce IEnumerable, IQueryable ve son olarak var tipine bakalım.
IEnumerable yapısı;
IQueryable yapısı;
var yapısı;
List yapısı;
Çalıştıralım;
Sql Profiler ile takip edelim;
IEnumerable sorgulaması ;
IQueryable sorgulaması ;
Neeeeeee !
IEnumerable tüm data’yı çekip daha sonra o çektiği data’dan tekrar mı sorguluyormuş? Aman Allah’ımmmm
Sürelere baktığımız zaman var daha hızlı görünüyor peki bakalım breakpoint koyarak detayına inelim var neden bu kadar hızlıymış.
Çalışma anında var, gelen değeri en iyi nasıl saklayacağını ayarlıyor ve yapısını o şekilde belirliyor. Yani şuan için en uygunu yine IQueryable.
Bir sonraki