EntityFramework vs Fluent NHibernate

Başlıktan da anlaşılacağı üzere bu testimde kendi bilgisayarımda EF ve FNHibernate’i karşılaştırdım ve performans grafiğini çıkardım.

Bahsi geçen işlemleri elimden geldiğince aynı datalar üzerinde uygulamaya çalıştım. Şimdi işlem işlem performans sonuçlarını görelim isterseniz.
Not: Tüm işlemler BULK(Toplu) olarak yapılmıştır. Yalnızca adet olarak “tekil” belirtilen işlemler tek başına yapılmıştır.

INSERT İŞLEMİ

Adet10.000
Entity Framework26.576ms
Fluent NHibernate4.695ms
Adet25.000
Entity Framework185.167ms
Fluent NHibernate9.251ms
Adet1.000.000
Entity Framework34.275.210ms
Fluent NHibernate325.595ms

Evet, tabloda da göreceğiniz üzere bu aşamada FNHibernate ciddi bir +performans farkıyla karşımıza çıkmaktadır.

INSERT İŞLEMİ (NON-CLUSTEREDINDEXES)

Adet10.000
Entity Framework27.121ms
Fluent NHibernate4.785ms
Adet25.000
Entity Framework179.406ms
Fluent NHibernate10.786ms
Adet100.000
Entity Framework717.321ms
Fluent NHibernate46.908ms

Bilindiği üzere Non-Clustered Index olan bir tabloda veri yazmak kimi zaman bir işkence halini alabilmektedir. İşte bu noktadaki birden fazla indexleme yapılmış tabloda da yine Fluent NHibernate EntityFramework’e göre 10 ila 17 kat daha performanslı olarak karşımıza çıkıyor.

UPDATE İŞLEMİ

Adet1
Entity Framework1ms
Fluent NHibernate17ms
Adet10
Entity Framework13ms
Fluent NHibernate29ms
Adet1.000
Entity Framework240ms
Fluent NHibernate143ms

Fluent NHibernate bu alanda tekil transaction’da her ne kadar bir tık geride gibi dursa da bu sizi yanıltmamalı. Fluent NHibernate ile ilgili daha sonra yazacağım makalelerde de bahsedeceğim üzere FNHibernate insert ve update işlemlerini transaction_scope() içerisinde gerçekleştirir. Bu da hatalı yapılabilecek bir işlemde kaydı geriye döndürme imkanı sağlamaktadır bilindiği üzere. Bu nedenle aslında burada 1-10 kayıt dolaylarındaki bu yavaşlık tamamen transaction_commit() işleminde doğmaktadır. Yoksa Update işleminin geneline özel bir yavaşlığı kesinlikle söz konusu değildir. Zira 1000 kayıtta bu performansı çok net görebilirsiniz. Yani düz hesap şunu diyebiliriz; Update 1ms, ama transaction_commit() toplamda yaklaşık 16ms. 🙂

SELECT İŞLEMİ

Adet10.000
Entity Framework568ms
Fluent NHibernate920ms
Adet25.000
Entity Framework835ms
Fluent NHibernate2.131ms
Adet1.000.000
Entity Framework22.412ms
Fluent NHibernate38.669ms

ID SELECT İŞLEMİ

Adet1
Entity Framework315ms
Fluent NHibernate939ms
Adet5
Entity Framework323ms
Fluent NHibernate1.266ms

İşte, testlerimde EntityFramework ile kapışamadığı tek nokta burası. Tüm testlere rağmen tekil ve çoğul select işlemlerinde Fluent NHibernate bir tık geride kalıyor. Tabi bu noktaları belli başlı methodlar izleyerek rahatlatmak ve EntityFramework’ten farksız hale getirebilmek mümkün. Ancak bunu ayrı bir makalede bu işlemleri anlatırken detaylı izah ediyor olacağım.

Şimdilik bu kadar. Umarım faydalı bir test işlemi olmuştur. Bir sonraki yazımda da başka bir ORM olan PetaPoco ile EntityFramework ve Fluent NHibernate’i karşılaştırdım.
O makalemi de en kısa zamanda paylaşıyor olacağım.

Şimdilik okuyan herkese teşekkürler. Sorularınız olursa lütfen aşağıdaki yorumlar alanında sorunuz. En kısa sürede yanıtlamaya çalışacağım…

0 0 votes
Article Rating
Subscribe
Bildir
guest
0 Yorum
Inline Feedbacks
View all comments