Resultados en aplicaciones reales usando NHibernate Reflection Optimizer

Quizás algunos van a pensar que esto es una aplicación usando NHibernate, pero la verdad es que no. Como es una aplicación sin NHibernate me las arreglé para convertir DataTables resultados de consultas a objetos de Negocio o colecciones de objetos para poder manejarlos fuera de la capa de Infraestructura de una manera más interesante.

La capa de Infraestructura posee unos helpers para realizar la conversión que nombramos usando algunas convenciones, attributes y reflection! Llega la hora de la optimización y tenemos que afrontar que Reflection no es algo de lo que se debe abusar, pero tampoco está prohibido.

En este post mostraba alguna de las bondades de NHibernate como buen ORM y las optimizaciones que posee a la hora de instanciar objetos, o setear/obtener los valores de las properties o fields.

Los Helpers de datos básicamente están encargados de convertir Datatables a Colecciones de Entidades o simplemente a Entidades. Para esto podemos tener métodos como ser: GetEntities y GetEntity

Las pruebas se hicieron realizaron la misma cantidad de consultas y con los mismo datos en la base. El profiler para realizar las pruebas es DotTrace, de la empresa JetBrains.

Sin optimizaciones:

Con Optimizaciones (NHibernate Reflection Optimizer)

53 llamadas a GetEntities: 111,18 ms. contra los 66,921 ms. del GetEntities con las optimizaciones. Destaquemos aquí que GetEntities solamente realiza conversiones para obtener colecciones y objetos de negocios, y no realiza ninguna hit a la base de datos.

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 !

Beta1: NHibernate 2.0 y NHibernate Contrib Releases

Disfrutenlo !

NHibernate 2.0 beta1

NHibernate Validator 1.0 beta1

NHibernate Mapping Attributes for NH Beta1

NHibernate.Burrow 1.0 alpha1 liberado !

Me pone contento anunciar esta noticia. Si, NHibernate Burrow está listo para descargar aquí, pruebalo, necesitamos feedback.

Pero, que es NHibernate Burrow ?

NHibernate.Burrow is a light weight middleware developed to support .Net applications using NHibernate as ORM framework by providing advanced and smart session/transaction management and other facilitates.

Kailuo Wang, líder de NHibernate.Burrow, estuvo trabajando duramente en este proyecto que finalmente sale a la luz (y de hecho lo sigue haciendo). También obtuvo ayuda de Nelo Pauselli, y Fabio Maulo (cualquier parecido con la gente de NHibernate-Hispano es pura coincidencia :D). El anuncio oficial se hizo aquí.

Kailuo, es un buen programador, por suerte hace buenas wikies también :) Podemos encontrar documentación acerca de Burrow aquí.

Si alguna vez necesitaste usar NHibernate en Aplicaciones Web, Burrow puede ser una opción a tener en cuenta. También entonces recordarás este articulo por demás ponderado en Code Project. Este articulo habla sobre buenas practicas de NHibernate, inclusive en un entorno web. Por suerte los ejemplos de Burrow están basados en este articulo. Estos ejemplos pueden ser encontrados en el SVN de NHibernate.Contrib aquí.

NHibernate 2.0 Offers Many New Features

Hoy en la lista de NHibernate Hispano, Rodrigo Juarez nos envía el siguiente enlace. 

Un articulo que sacó InfoQ que habla sobre las nuevas bondades de NHibernate 2.0 y es interesante para enterarnos de que está pasando en el desarrollo de NHibernate, y que se vendrá. Habla un poco sobre algunos proyectos de NHibernate.Contrib como Search, Shards, Validators. También nombra a nuestro humilde uNHAddins (vease NHibernate AddIns) y sobre algunos experimentos que hicimos ahí.

Articulo en InfoQ

NHibernate 2.0.0Alpha1 liberado

Aquí les dejo el enlace al precio de costo:


[Descargar aquí]

NHibernate 2.0 - Presentación y Ejemplos

La semana pasada estuve con el querido Fabio Maulo en el MUG (Buenos Aires) hablando sobre NHibernate. Fueron 2 lindas jornadas donde pudimos meternos a fondo con NHibernate y ver cosas que quizás no son tan conocidas, y también cosas nuevas de este framework.

Los ejemplos que hicimos tienen la particularidad de ser proyectos de Test. Si necesitan hacer debugging en ellos quizás Resharper o TestDriven puede ayudar. Debo dar las gracias a Diego Jancic que estuvo colaborando en los ejemplos también.

Este es el enlace con la presentación y los ejemplos:

Descargar Presentación y Ejemplos

Nuevo Proyecto: NHibernate Contrib

A raíz de largas discusiones en la lista de desarrolladores de NHibernate se ha decidido separar los proyectos non-core de NHibernate en otro proyecto dentro de Sourceforge. Entre los proyectos que destaco que estarán bajo este paraguas son NHibernate Attributes a cargo de Pierre Kuate; NHibernate Search a cargo de Oren Eini; NHibernate Validator, NHibernate Shards que están a mi cargo y NHibernate Burrow a cargo de Kailuo Wang.

Este último proyecto es nuevo, que trae todo lo bueno de la intergración con NHibernate de MindLib, es decir, MindLib va a ser fusionado a NHibernate Burrow.

Entre las cosas que Burrow pretende solucionar está el manejo de la sesión de NHibernate, tanto en aplicaciones desktop como web.

Una de las cosas que me gusta de Burrow es que vamos a tener una herramienta "nuestra" o "de la casa" que solucione o haga un poco más transparente esos asuntos a los que estamos expuestos día a días en nuestras aplicaciones con NHibernate.

Sabrán más sobre NHibernate Contrib en breve.

Seminarios Gratuitos de NHibernate en Buenos Aires

Ya están los horarios para los seminarios de NHibernate en Buenos Aires en el que voy a estar junto a Fabio Maulo disertando sobre NHibernate. El lugar es en el Auditorio del MUG: Rivadavia 1479 1º A.

Fechas y Horario:

Miércoles 20 y Jueves 21 de febrero de 2008, en el horario de 18.30 a 21.30 hs.

SEMINARIO 20/02/08 “NHibernate: ORM Persistence Framework”

- Quick Start
- Entorno de test de entities
- Manejo de Session de NHibernate: Qué cosas hacer y qué no.
- Parent-Child
- Overview Lazy-Loading
- Ejemplo de como cambiar base de datos usando los ejemplos generado
en toda la charla.
- Overview NHibernate.Validator

SEMINARIO 21/02/08 “NHibernate Advanced”

- Introducción a NHibernate
- Manejo de Sesiones.
- Conceptos y ejemplos: EntityName, SQL nativa para CRUD, Transformers, StoredProcedure, Named-Queries, Event-Listeners, Filters, MultiQuery, StatelessSession, UserType, UserCollectionType, Batch-size entre otros.
- Queries: HQL, Criteria, SQL Nativo.
- NHibernate.Shards: Estado del arte
- Tunning

cia.vc: Estadísticas Open source al instante

Hace unos días estuve mostrando algunas de las características de Ohloh. La verdad que Ohloh es completo, pero la actualización de la información no es inmediata, y no muestra un avance real del proyecto.

CIA.vc nos provee de una manera más simple pero en tiempo real las estadísticas de commits. Por ejemplo, este es el informe de los commits en NHibernate. También poseemos feed RSS 2.0 para los commits.

Espero que sirva.