Hola,
Yo he tenido que programar una grilla para paginar 5000 elementos. Si
realizas las consultas con paginación, me funciona como un rayo.
Algo así como:
protected IList<T> GetPageList<TKey>(string filter, TKey key,
string orderProperty, int firstResult, int maxResults)
{
string hQuery = string.Format("from c in {0} where c.{1}
= :parameter order by c.{2}", persitentType.Name, filter,
orderProperty);
IQuery query = NHibernateSession.CreateQuery(hQuery);
query.SetParameter<TKey>("parameter", key);
if (firstResult > -1) query.SetFirstResult(firstResult);
if (maxResults > -1) query.SetMaxResults(maxResults);
return query.List<T>();
}
Principalmente usando SetFirstResult y SetMaxResults (esta función del
ejemplo es una genérica de una app mía). Y si te va lentito, siempre
puedes agregar un índice en la bbdd por el campo de filtro (si existe
dicho filtro).
Ya te digo que con listas de 5000 elementos tengo tiempos de respuesta
en la web inferiores a 1 segundo (con rendering incluido).
Por las pruebas, parece que el tiempo de respuesta se mantiene
constante aunque incrementes el número de elementos, ya que
simplemente incrementas el número de páginas, no se resultados de una
consulta.
On 6 ene, 05:28, Juan <[email protected]> wrote:
> Por desgracia no me dan comision por la propaganda, pero si estas
> haciendo profiling puede que te venga bien (si no lo has hecho ya),
> darle una ojeada a nhprof (http://nhprof.com/). Deberia darte una idea
> de por donde anda tu problema, si es efectivamente el cache, la
> sesion, etc.
>
> On Jan 4, 10:54 am, Felipe <[email protected]> wrote:
>
>
>
> > Necesito desplegar una grilla, la cual actualmente estoy transformando
> > de un grafo de objetos persistentes a DTOs.
> > Lamentablemente el rendimiento es muy bajo, ya que cada celda de la
> > grilla es una instancia, e incluso se combina una fila con celdas que
> > provienen de otros objetos persistentes. Dado lo anterior hay que
> > hacer un manejo importante a nivel de DTO, por lo cual armo algunos
> > Dictionary para mejorar la eficiencia y además dado que la grilla es
> > jerárquica.
>
> > Probé utilizando el comando "select new ClaseDTO(parametros)" para ver
> > la mejora de rendimiento, y es notoria. Actualmente estoy recuperando
> > cerca de 10.000 objetos, y esto afecta no sólo la recuperación, sino
> > también el cierre de la Sesión.
>
> > El problema es que dado que la estructura es compleja, el constructor
> > de la ClaseDTO es enorme, y quería ver si existía alguna alternativa
> > de que NHibernate me devolviera el grafo de objetos sin ningún tipo de
> > control (persistence manager), de este modo usa las entidades como
> > DTOs o Bean transientes o "detached" y debiera disminuir el tiempo de
> > carga.
>
> > La pregunta obvia es, ¿Es esto posible?, ¿mejoraría el rendimiento?
>
> > Gracias,
--
Para escribir al Grupo, hágalo a esta dirección:
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano