Wednesday, December 1, 2010

Compiled Query ile sorgularınızı hızlandırın




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 Compile(Expression> query) where TArg0 : DataContext;
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 FUncGetEntityByIdForInvoice =
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

Tuesday, November 9, 2010

New Namespaces in the .NET Framework 4

The following namespaces are new in the .NET Framework version 4.

Monday, July 26, 2010

İyi bir Unit Test de olması gerekenler

1. Otomatik ve tekrarlanabilir bir yapıda olmalı.
2. İmplemente edilmesi kolay olmalı
3. Kod yazıldığı anda , gelecekte de değişiklik olmadan çalışır durumda olması.
4. Herkesin bu kodu çalıştırabiliyor olması gerek.
5. Hızlı çalışması gerek.

Tuesday, January 27, 2009

SQLServer 2005 install ederken MSXML6 kurma adımında hata vermesi

Bu problem iki defa başıma geldi birincisinde rastgele çözmüştüm, ama ikincisinde sebep olan problemin xp sp3 le geldiğini anladım. bir şekilde sql server 2005 i kuramıyorsunuz.
Çözüm:
Control Panel - Add-Remove Programs MSXML6 yı uninstall edin.
Windows Installer Cleanup tool unu download edip makinenize kurun. Çalıştırdığınızda karşınıza gelecek olan listeden MSXML 6.0 Parser[6.00.3883.8] ı bulup remove edin ve tekrar sql server 2005 setup ını çalıştırıp kurmayı deneyin.

Monday, December 1, 2008

ADO.NET Entity Framework

Yakında bu konu hakkında güzel yazılar yazacağım... şimdilik hoşçakalın

Friday, October 17, 2008

ASP.NET MVC Beta release oldu...

Evet Nihayetinde asp.net MVC framework BETA sı 2 gün önce release oldu. ASP.NET MVC Beta .NET 3.5, .NET 3.5 SP1 ile çalışıyor. Dolayısıyla VS2008 ve Visual Web Developer 2008 Express SP1 i destekliyor. Bir çok bug fix edildi, performans tuning işlemi kondu. Bu projeyle uğraşan developer takımı final projesinde çok bir şey değişmeyeceğini artık piştiğini ve core un oluştuğunu söylüyorlar.

Yeni Eklentiler ve değişikliker:
  1. VS içine Add View menüsü eklendi.
  2. \Scripts directory ve jQuery desteği.
  3. Built-in Model Binder complex type ları destekliyor.
  4. Refactor Model Binding Yapısı.
  5. UpdateModel ve TryUpdateModel Senaryolarının geliştirilmiş Unit Testing i
  6. HTML Cleanup ve Refactoring.
  7. Silverlight / asp.net MVC project in içinde geliyor.
  8. Better Validation Error Messages.
Click Here to download it. Hatta detayını öğrenmek için www.asp.net/mvc adresini ziyaret edebilirsiniz.