4 Ocak 2012 Çarşamba

DataBinder.Eval kullanımı performansı düşürmekte

Selamar,

 

Uygulamalarımızda reflection kullanımının gecikmelere neden olduğunu biliyoruz, fakat ne boyutta olduğunu görmeyince insan fazla önemsemiyor.

Dynatrace’deki 30 dakikalık gözlemde şu sonuç ortaya çıkınca aslınca çok ama çok önemsenmesi gerektiği anlaşılıyor.

 

 

Bu rakamlar müşteri test ortamında elde edildiği için canlı ile bire bir aynı olmayabilir fakat reflection’dan kaynaklanan gecikme çok net görülüyor.

 

Bugün avicode’da hataları ve performans durumunu incelerken bir kayıt dikkatimi çekti:

 

 

BookingNavlunListele metodu içinde veritabanı sorguları dahil bir çok kod işletilmesine rağmen 216 + 134 = 350 ms zaman alırken verilerin gride bağlanması 952 + 1052 = 2004 ms zaman almış. Toplam 3.2 sn’nin 2 sn’si binding’de geçmiş. Sebebini anlamak için biraz araştırmanın ardından basit bir test uygulaması geliştirdim. Bind işleminde geçen süreleri ms cinsinden aşağıda görebilirsiniz:

 

Bind("Id")

DataBinder.Eval(Container.DataItem,"Id")

((System.Data.DataRowView)Container.DataItem)["Id"]

1 istek

702

649

693

699

699

709

706

649

678

3 istek

10320

10036

572

5751

4900

575

5358

4924

664

5 istek

6002

6313

669

5210

5613

701

5244

4970

546

10 istek

4824

5145

544

4330

3827

582

6507

6176

574

 

(Makinenin o anki durumundan ve anlık şartlardan bağımsız olarak karşılaştırma yapmayı garanti edebilmek için her durum 3 kez örneklenmiştir)

 

Server’e tek istek gelmesi durumunda Databinder.Eval kullanımının bir zararı yok gibi görünse de aynı anda çok fazla istek gelmeye başlayınca durum değişiyor.

 

http://msdn.microsoft.com/en-us/library/2d76z3ck.aspx adresinde Microsoft bu durumu uyarı şeklinde belirtilmiş:

“Because this method performs late-bound evaluation, using reflection at run time, it can cause performance to noticeably slow compared to standard ASP.NET data-binding syntax. Use this method judiciously, particularly when string formatting is not required.”

 

Özetlemek gerekirse DataBinder.Eval kullanımını azaltabilirsek sayfalarımızın performansı artacaktır.

 

Tarık

 

Hiç yorum yok:

Yorum Gönder