Frans Bouma, el creador del ORM LlBlGen, escribió en diciembre un blog post donde comparaba el rendimiento de carga de varios ORM’s (http://weblogs.asp.net/fbouma/archive/2013/12/09/fetch-performance-of-various-net-orm-data-access-frameworks.aspx). Naturalmente Frans Bouma no incluyó EntityLite, un micro ORM creado por mi, ya que hace muy poco que está disponible en NuGet y aún está en beta.
Al darme cuenta de que el código fuente del bench mark estaba disponible (https://github.com/FransBouma/RawDataAccessBencher), me decidí a incluir el EntityLite también en las pruebas haciendo un fork del repositorio (https://github.com/jesuslpm/RawDataAccessBencher).
Cual fue mi sorpresa al descubrir que EntityLite es de los más rápidos. Ciertamente el benchmark no siempre da los mismos resultados y no siempre EntityLite queda el primero, pero muchas veces así es. Aquí tenermos algunos de los resultados.
Non-change tracking fetches, set fetches (10 runs), no caching ------------------------------------------------------------------------------ Handcoded materializer using DbDataReader : 185,50ms. Enumeration average: 1,13ms PetaPoco Fast v4.0.3 : 230,50ms. Enumeration average: 1,38ms EntityLite 1.0.10-Beta : 233,50ms. Enumeration average: 1,00ms Entity Framework v6.0.0.0 (v6.0.21211.0) : 244,13ms. Enumeration average: 1,13ms PetaPoco v4.0.3 : 267,38ms. Enumeration average: 2,00ms Linq to Sql v4.0.0.0 (v4.0.30319.18408) : 276,00ms. Enumeration average: 1,13ms Dapper : 314,50ms. Enumeration average: 2,50ms ServiceStack OrmLite v4.0.5.0 (v4.0.5.0) : 425,00ms. Enumeration average: 2,00ms LLBLGen Pro v4.1.0.0 (v4.1.13.1213), typed view : 516,25ms. Enumeration average: 5,63ms Oak.DynamicDb using dynamic Dto class : 934,63ms. Enumeration average: 226,50ms
Non-change tracking individual fetches (100 elements, 10 runs), no caching ------------------------------------------------------------------------------ PetaPoco Fast v4.0.3 : 1,55ms per individual fetch Handcoded materializer using DbDataReader : 1,59ms per individual fetch EntityLite 1.0.10-Beta : 1,59ms per individual fetch Dapper : 1,75ms per individual fetch ServiceStack OrmLite v4.0.5.0 (v4.0.5.0) : 1,87ms per individual fetch Oak.DynamicDb using dynamic Dto class : 1,91ms per individual fetch LLBLGen Pro v4.1.0.0 (v4.1.13.1213), typed view : 2,23ms per individual fetch Entity Framework v6.0.0.0 (v6.0.21211.0) : 3,00ms per individual fetch Linq to Sql v4.0.0.0 (v4.0.30319.18408) : 4,77ms per individual fetch PetaPoco v4.0.3 : 9,91ms per individual fetch
EntityLite está en NuGet: (https://www.nuget.org/packages/EntityLite/1.0.10-Beta)
El código fuente en GitHub: (https://github.com/jesuslpm/EntityLite)
La documentación de EntityLite está confeccionándose, estoy escribiendo un artículo para CodeProject, aquí está lo que llevo escrito hasta el momento (https://github.com/jesuslpm/EntityLite/tree/master/CodeProject)
Suena muy bien. Espero ansioso el artículo de CodeProject.