Compiled Query, Linq sorgularının hızlandırılması için yapılan bir yöntemdir. sql sorgulamaları için yapılan Stored Procedure gibi sonuc verir. c# ta sorgulama yaparken zamanı aşağıdaki kodlarla kontrol ederiz. Aradaki fark 3-5 tane veri getirilmesi durumunda cok fazla anlasılmayabilir ama aradaki farkı gösterebilmek için veritabanınıza 20.000 veri yüklediğinizde sorgularınızın ne kadar hızlandığını görmüş olursunuz. Compiled Sorguları genellikle veritabnından yüklü müktarda veri getirirken işe yaradığı içinde bende Select işlevindeki Compiled Queryleri anlatmaya çalısacağım
zaman ölçen kodlamalar:
System.Diagnostics.Stopwatch zamn = new System.Diagnostics.Stopwatch();
zamn.Restart();
//sorgulama kodları
zamn.Stop();
string fark = (zamn.Elapsed).ToString();
Compiled Yapısı:
public static Func<ActionEntities, string, IQueryable<TBL_Deneme>> DenemeTumVeri =
CompiledQuery.Compile((ActionEntities context, string name) =>
from gs in context.TBL_Deneme
where gs.isim==name
select gs);
Burdaki son üç satir bildiğiniz Linq sorgusu. İlk iki satirda linq sorgusunu Compiled yapan kodlamalar. Visual Studio'nun compiled fonksiyonunu tanıyabilmesi için using System.Data.Objects ' i using kısmına eklemelisiniz. ActionEntities EntityModel yazısında anlatılan veritabanı Modelini tutan değerimiz. string ile sorgumuzun string değerinde bir parametre aldığını gösterir. birden fazla parametrelerde en sondan bir oncekine kadar parametre verebilirisniz. en sonda verilen IQueryable<TBL_Deneme> ise geri dönüş değerini belirtir. ikinci satirda ise gelen parametreleri bir değişkene atar ve sorgulamada bu değişkenleri kullanır. Burda dikkat edilmesi gereken nokta compiled Query global olarak tanımlanır.Methodlarda bu Query'i çağırma yöntemi;
ActionEntities contex = new ActionEntities();
var deneme = DenemeTumVeri (contex,"Betül");
Örnek olması açısından çeşitli Linq sorgulamalarını Compiled Query' e çevirelim. (sorgulamalar için linq sorgulamalr yazısındaki tablo ve sorgular cevrilmiştir)
Linq:
var musteri = (from s in context.tbl_musteri where s.musteri_yas==18
select s.musteri_ad_soyad).ToList();
CompiledQuery:
public static Func<ActionEntities, int, IQueryable<tbl_musteri>> musteri =
CompiledQuery.Compile((ActionEntities context, int musteri_yas) =>
from g in context.tbl_musteri
where g.musteri_yas== musteri_yas
select g);
Linq:
var musteri = (from s in context.tbl_musteri where s.musteri_ad=='Seda Yılmaz'
select s.musteri_meslek).FirstOrDefault();
CompiledQuery:
public static Func<ActionEntities, string, string> =
CompiledQuery.Compile((ActionEntities context, string musteri_ad) =>
from g in context.tbl_musteri
where g.musteri_ad== musteri_ad
select g.musteri_meslek);
Linq:
var rez = (from mus in context.tbl_musteri where musteri_ad_soyad='Seda Yılmaz'
join rz in context.tbl_rezervasyon on mus.musteri_id equals rz.musteri_id
select rz).ToList();Compiled Query:
public static Func<ActionEntities, string, IQueryable<tbl_musteri>> =
CompiledQuery.Compile((ActionEntities context, string musteri_ad_soyad) =>
from mus in context.tbl_musteri where musteri_ad_soyad= musteri_ad_soyad
join rz in context.tbl_rezervasyon on mus.musteri_id equals rz.musteri_id select rz);
Hiç yorum yok:
Yorum Gönder