ben

OMÜ , Bilgisayar Mühendisliği, 13'

25 Ocak 2013 Cuma

Compiled Query

  
    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: