다음을 통해 공유


IQueryable ile IEnumerable farklılıkları

IEnumerable ve IQueryablefarklı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ı;https://erkanguzelkucuk.files.wordpress.com/2016/07/ienumerable1.png?w=625

IQueryable yapısı;
https://erkanguzelkucuk.files.wordpress.com/2016/07/iqueryable1.png?w=625

var yapısı;
https://erkanguzelkucuk.files.wordpress.com/2016/07/varq1.png?w=625

List yapısı;https://erkanguzelkucuk.files.wordpress.com/2016/07/list.png?w=625

 

Çalıştıralım;

https://erkanguzelkucuk.files.wordpress.com/2016/07/console1.png?w=625

 

Sql Profiler ile takip edelim;

IEnumerable sorgulaması ;
https://erkanguzelkucuk.files.wordpress.com/2016/07/profie1.png?w=625

IQueryable sorgulaması ;

https://erkanguzelkucuk.files.wordpress.com/2016/07/profiq1.png?w=625

https://erkanguzelkucuk.files.wordpress.com/2016/07/42_emoticonshdcom.png?w=625

**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ış.

https://erkanguzelkucuk.files.wordpress.com/2016/07/console11.png?w=625

Ç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.