Merhaba,
Kullandığımız LinqToSql sorgularında çalışma mekanizması kabaca aşağıdaki gibi.
Her LinqtoSql komutu çalıştırıldığında tüm adımları baştan almaktadır. System.Data.Objects.CompiledQuery Sealed class sayesinde, bu sorguları önbellekleyerek direkt db ye gönderide bulunmakta ve sorgu hızı 5-6 kat artmaktadır.
Sorgu ilk çalıştırıldığında LinqtoSql engine sonucu cache leyecek ve daha sonraki sorgularda cahce den işlemleri devam ettirecek. Result ın cache lenmediğine dikkat çekmek isterim sadece linqtosql sorgusunu çalıştırdığı anda db ye gönderene kadar yaptığı işlemleri cache ler, sorgunun sonucunu değil.
public static Func
Targ0 DataContext nesnesini - zaten bu tip üzerine bir kısıtlayıcı (constraint) konulmuş -
Targ1 filitreleme işleminde kullanılacak parametreyi
TResult işlem sonucunda geriye dönecek verinin türünü
query ise Linq To Sql sorgusunu temsil etmektedir.
private static Func
System.Data.Objects.CompiledQuery.Compile
(EntitiesModel ctx, int ID) =>
ctx.Entity.Where(ti => ti.ID == ID).Select(p => new AnonymEntity
{
ID = p.ID,
Name = p.Name,
TypeID = p.FinanceTypes.FinanceTypeID,
StatusID = p.FinanceStatus.FinanceStatusID,
FinanceRelationID = p.Relations.RelationID,
InvoiceAddressID = p.Addresses1.AddressID,
PaymentTermsID = p.PaymentTerms.PaymentTermsID,
VATCodeID = p.VatCodes.VatCodeID,
GeneralLedgerAccNo = p.GeneralLedgers.GeneralLedgerID
}).FirstOrDefault()
);
using (EntitiesModel context = new EntitiesModel ())
{
AnonymEntity lopc = lopc = FUncGetEntityByIdForInvoice (context, Id);
}
Ortalama performance artışı ile ilgili rakamlar;
Sorgu Sayısı Complied Query Normal Query
1 0 ms 3 ms
10 3 ms 22 ms
100 30 ms 174 ms
1000 284 ms 1786 ms
Sorgu Sayısı Complied Query Normal Query
1 0 ms 3 ms
10 3 ms 22 ms
100 30 ms 174 ms
1000 284 ms 1786 ms
No comments:
Post a Comment