NHibernate: Cuánto más lento por Reflection?
NHibernate (como muchos frameworks de IoC) tiene un optimizador de reflection para crear objetos, setear y obtener valores de los campos/propiedades (fields/properties). No hay que estar preocupados acerca de esto: NHibernate no está usando Reflection en la manera que la conocemos.
Esto podría ser un buen argumento a la hora de “vender NHibernate” a: nuestro cliente, una Compañía o mi jefe. Echemos un vistazo a los resultados de una corrida de un proyecto de consola.

As you can see the use of the reflection optimized is faster than the use of reflection. Obviously direct access is the fastest way, but impossible to use in a ORM like NHibernate (as in many other frameworks).
Como se puede apreciar el uso de reflection con el optimizador es más rápido que el uso normal de reflection. Obviamente el uso de acceso directo a las propiedades es la manera más rápida de hacerlo, pero en un ORM como NHibernate no se puede hacer (como en muchos otros frameworks) por el descubrimiento de nuestros tipos en runtime.
Conclusiones
- Usando el optimizador de reflection hace a nuestra aplicación más rapida que aquella que usa los servicios comunes de reflection.
- El acceso a field (campo) es más rápido que el acceso por properties. Esto puede ser un buen argumento a la hora de elegir tanto si mapear NHibernate usando fields o properties.
- Es obvio, pero lo vamos a nombrar: la manera más rápida de acceder a los objetos es usando acceso directo esto es: no-reflection.
Se puede descargar aqui la aplicación de ejemplo.
Gracias Fabio Maulo por hacer de este ejemplo más lindo. Gracias che !
3 Responses to NHibernate: Cuánto más lento por Reflection?
Leave a Reply Cancel reply
-
Categories
- .NET
- ActiveRecord
- agil
- Alt.Net
- AOP
- Asp.net MVC
- blog
- C#
- codegeneration
- cosas interesantes
- db4o
- db4o-analyzer
- DLR
- enterprise-library
- expresiones regulares
- General
- Hibernate
- IoC
- it
- Java
- LINQ
- Linux
- Lucene
- Mocking
- Mono
- monosms
- MVC
- NAnt
- NHibernate
- NHibernate.Burrow
- NHibernate.Contrib
- NHibernate.Validator
- noticias
- O/R Mapping
- Open Source
- patrones
- personal
- podcast
- programación
- Redes Neuronales
- Refactoring
- regex
- Scrum
- Security
- Shards
- Sin Categoría
- Spring
- SqlServer
- Testing
- tips
- Tool
- tutorial
- Ubuntu
- uNHAddIns
- video
- Virtualización
- Visual Basic.Net
- Visual Studio
- VMWare
- Web
-
Articles
- June 2011
- May 2011
- November 2009
- October 2009
- April 2009
- March 2009
- February 2009
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- June 2007
- May 2007
- April 2007
- March 2007
- February 2007
- January 2007
- December 2006
- November 2006
- October 2006
- September 2006
- August 2006
- March 2006
- February 2006
- December 2005
- November 2005
- October 2005
-
Meta





[...] este post mostraba alguna de las bondades de NHibernate como buen ORM y las optimizaciones que posee a la [...]
Mira vos que chiche interesante!, yo estaba haciendo algo como esto cuando necesitaba performance:
http://www.codeproject.com/KB/cs/FastMethodInvoker.aspx
Pero parece que esta bien encapsulado dentro de NH
Hola Diego, este tipo de técnica no es nueva, muchos frameworks la usan, NHibernate no es la excepción, y la librería que nombras basicamente hace lo mismo (clases más …clase menos), usa Emit para generar IL.
En NHibernate toda esta funcionalidad la pueden encontrar aqui:
https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate/Bytecode/
O pueden ver como funciona mirando el código del ejemplo, y así poderlo usarlo luego en sus aplicaciones donde lo justifique.
Un abrazo