Estoy usando NHibernate para ORM y he consolidado la carga de muchas entidades en una gran consulta.Latencia NHibernate es muy alta
De hecho estoy cargando un diccionario de palabras, alrededor de 500K entradas, y cada palabra se relaciona con otras. Ejecutar el proceso de carga en segundo plano puede ser muy complicado en nuestra aplicación, ya que tendríamos que cargar manualmente una entrada que no se ha cargado a tiempo, ya que cualquier palabra podría pedirse en cualquier momento. Nuestros únicos requisitos son que todos los datos se carguen lo más rápido posible. También probé usando una sesión sin estado, pero recibí una excepción de que las sesiones sin estado no pueden recuperar colecciones (por alguna razón, ¿tiene que ver con el hecho de que no hay caché para sesiones sin estado?)
El problema es que aunque la consulta no demora más de 25 segundos en SQLServer, toma mucho más de 3 minutos para ICriteria.List().
Usé NHProf para perfilar el proceso de carga y encontré que la creación de las entidades es una tarea costosa, que ocupa la mayor parte del tiempo de carga en NHibernate.
¿Hay algo que pueda hacer para reducir esta latencia? ¿Es costosa la asignación de memoria o es el "relleno" de los datos?
Gracias!
¡Gracias por la respuesta rápida! Estoy tratando de cargar más de 500,000 filas, cada una de las cuales es una entidad. Cada entidad puede señalar hacia otras entidades. Estoy intentando completar esta lista lo más rápido posible con todas estas relaciones. No estoy escribiendo nada a la base de datos, pero después de experimentar con la carga lenta me di cuenta de que no se ajustaba a mis necesidades. Lo mejor que pude pensar es de alguna manera cargar los datos en un hilo diferente en algún tipo de patrón productor-consumidor, pero no tengo idea de cómo lo haces. ¿Algunas ideas? ¿Tiene algún consejo para otras tecnologías? Gracias! –
Todavía no tengo ni idea de por qué querría cargar tantas entidades interrelacionadas. Eso hace que sea difícil encontrar sugerencias. Cargar los datos en segundo plano puede tener sentido, pero solo si su aplicación puede comenzar a hacer lo que sea necesario sin tener todos los datos en su lugar. En resumen, cuéntenos qué quiere lograr, cuáles son sus requisitos, tal vez podamos darle una sugerencia adecuada o dos. – tijmenvdk
De hecho, estoy cargando un diccionario de palabras, cuando cada palabra se relaciona con otras. Lo de fondo podría ser muy complicado en nuestra aplicación, ya que tendríamos que cargar manualmente una entrada que no se haya cargado antes. El problema es que cualquiera de esas palabras podría pedirse en cualquier momento. Nuestros únicos requisitos son que todos los datos se carguen lo más rápido posible. También traté de usar una sesión sin estado, pero obtuve una excepción de que las sesiones sin estado no pueden obtener colecciones ... –