Contexto: modelo dominio de documentos que tienen ediciones y Etiquetas.rendimiento nhibernate hidratación
¿Qué tipo de cifras esperarás al hidratarte con nHibernate?
Mi modelo de dominio no es muy complejo y cuando consulto todos los documentos obteniendo ediciones y etiquetas la consulta devuelve un poco más de 8000 filas de la base de datos, que a su vez están hidratadas en unos 2300 documentos.
La operación de la base de datos lleva unos 100ms y el proceso de hidratación lleva 4000ms, lo cual me parece muy extraño.
dotTrace indica un gran número de llamadas (1,6 M) a
"System.Data.SQLite.SQLite3.ColumnName (SQLiteStatement, Int32)"
y similares.
La consulta se realiza utilizando criterios como este:
var docsQuery = _session.CreateCriteria<Document>();
docsQuery.SetFetchMode("Editions", FetchMode.Join);
docsQuery.SetFetchMode("Tags", FetchMode.Join);
docsQuery.SetResultTransformer(new DistinctRootEntityResultTransformer());
return docsQuery .List<Document>();
Nota: Seguramente limitar el conjunto de resultados mejorará el rendimiento. Mi principal preocupación era por qué el mal rendimiento de hidratación en general. Jugando con session.FlushMode y session.CacheMode no ayuda mucho en mi caso.
ACTUALIZACIÓN: Aquí hay una captura de pantalla del generador de perfiles.
ACTUALIZACIÓN 2: comprobado los tiempos de consulta y que son unos 100 ms en absoluto.
¿Puede publicar algunas capturas de pantalla de su perfil dotTrace? –
Actualizado con una captura de pantalla. Tenga en cuenta que el mismo SQL Server y SQLite realizan lo mismo. – JensJ
@JensJ, me resulta difícil creer que la llamada a DB demora 1 ms para devolver 8000 filas. –