Cesar,

Fijate en que setup (TestInitialize, ClassInitialize o AssemblyInitialize)
esta la lógica de inicialización y pasalo lo mas arriba posible.

----------------------------------
Carlos Peix

2014-11-19 22:28 GMT-03:00 César Pistiner <[email protected]>:

> Hola Pedro!
>
> Primero gracias por tu completa respuesta.
>
> Si, efectivamente usé un profiler para ver la select que esta generando NH
> y esa es la que puse en el management studio. Gracias por los links, voy a
> leerlos con tiempo. En cuanto saque la lógica de configuración e
> inicialización de NH al setup les comento como fueron los resultados. Me
> imaginaba que algo de tiempo se lo llevaba eso pero no pensé que era tanto.
>
> Gracias nuevamente.
>
> Saludos,
> César
>
> El mié, nov 19, 2014 08:08 PM, Pedro Wood <[email protected]> escribió:
>
> Hola César
>>
>> Cuando corrés el query desde el managment studio sólo toma en cuenta el
>> tiempo de la consulta en si, en cambio tu test incluye tiempo de conexión a
>> la base e inicialización de NH.
>>
>> En ese test seguro se está llevando la mayor parte del tiempo esto último
>> y no la consulta en si.
>>
>> Como primer paso sacá esto al setup de los tests:
>>
>> Configuration nhConfiguration = new Configuration();
>> nhConfiguration.Configure("hibernate-performance.cfg.xml");
>> ISessionFactory sessionFactory = nhConfiguration.BuildSessionFactory();
>>
>> Para conocer más sobre el tema del manejo de la sesión:
>>
>>
>> http://joseoncode.com/2011/03/03/effective-nhibernate-session-management-for-web-apps/
>>
>> Para mejorar la performance de NH hay muchas cosas que se pueden hacer,
>> desde la configuración, el manejo de la sesión, en las consultas en sí
>> (según cómo las escribís, si usas lazy loading, o eagar fetch), ...
>> Un problema muy común como es el SELECT n+1
>>
>> Acá tenés info de performance:
>>
>> http://geekswithblogs.net/Optikal/archive/2013/03/10/152371.aspx
>>
>> Hay que empezar por diagnosticar bien dónde están los problemas de
>> performance y para eso necesitás por lo menos tener un log, o un profiler,
>> para ver el SQL que está ejecutando NH.
>>
>> Saludos,
>>
>> Pedro
>>
>>
>>
>> 2014-11-19 18:34 GMT-03:00 César Pistiner <[email protected]>:
>>
>> Si!! es el único test que estoy corriendo, en cuanto lo pruebe les
>>> comento como fue!
>>>
>>> Muchas gracias!
>>>
>>> Saludos,
>>> César
>>>
>>> El mié, nov 19, 2014 06:04 PM, Juan José Montes de Oca Arbós <
>>> [email protected]> escribió:
>>>
>>> Hola Cesar, si este es el único tests ejecutás demora mucho, porque
>>>> primero debe inicializar varias cosas.
>>>>
>>>> En un proyecto en el que trabajo pasaba lo mismo, y la solución fue
>>>> agregar un test vacío que se ejecutara primero, con un nombre tipo a00().
>>>>
>>>> También, como extra, podés probar de sacar la configuración de NH al
>>>> setup de los tests para reducir los tiempos de configuración de NH.
>>>>
>>>> Espero que te sirva de ayuda... ya nos cuentas como sigue la cosa.
>>>>
>>>> Saludos Y ÉXITOS!!
>>>>
>>>>
>>>> --
>>>> Juan José Montes de Oca Arbós.
>>>>
>>>> ===========================
>>>> Web personal: http://juanjose.montesdeocaarbos.com.ar/blog/
>>>>
>>>> El 19 de noviembre de 2014, 17:32, César Pistiner <[email protected]
>>>> > escribió:
>>>>
>>>>> Hola gente!
>>>>>
>>>>> Los molesto con un tema que me tiene mal, estoy teniendo algunos
>>>>> problemas de performance en nuestra aplicación web. Para atacar el 
>>>>> problema
>>>>> puntual me armé un test que es el siguiente:
>>>>>
>>>>> [Test, Timeout(5000)]
>>>>> [Category("Performance")]
>>>>> public void ImportacionDeComprobantes()
>>>>> {
>>>>> Configuration nhConfiguration = new Configuration();
>>>>> nhConfiguration.Configure("hibernate-performance.cfg.xml");
>>>>> ISessionFactory sessionFactory = nhConfiguration.BuildSessionFactory();
>>>>> using (ISession session = sessionFactory.OpenSession())
>>>>> {
>>>>> IResponsable emisor = session.Get<Transportista>(new
>>>>> Guid("CCD461E8-1299-4868-856F-9F0A00FDF3F5"));
>>>>>
>>>>> var criteria = session.CreateCriteria<DetalleResumenDeCuenta>();
>>>>> criteria.Add(Restrictions.Eq("IdExterno", "CC121"));
>>>>>
>>>>> criteria = criteria.CreateCriteria("Comprobante", "c");
>>>>> criteria.Add(Restrictions.Eq("c.Emisor", emisor));
>>>>>
>>>>> Assert.IsTrue(criteria.List().Count > 0);
>>>>> }
>>>>> }
>>>>>
>>>>> La ejecución de este test supera los *5 segundos*, pero me llama
>>>>> mucho la atención que si pongo la sentencia que genera NH en el SQL
>>>>> Management Studio, tarda *nada*, menos de 1 segundo. ¿Puedo tener
>>>>> tanta diferencia? ¿Qué puedo revisar para mejorar esto?
>>>>>
>>>>> Espero haber sido claro, si necesitan algo más de info (mapping,
>>>>> índices que tengo creados, etc.) puedo compartirlas sin problema.
>>>>>
>>>>> Desde ya, muchas gracias!
>>>>>
>>>>> Saludos,
>>>>> César
>>>>>
>>>>  --
>>>>> --
>>>>> Para escribir al Grupo, hágalo a esta dirección:
>>>>> [email protected]
>>>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>>>> ---
>>>>> Has recibido este mensaje porque estás suscrito al grupo
>>>>> "NHibernate-Hispano" de Grupos de Google.
>>>>> Para anular la suscripción a este grupo y dejar de recibir sus
>>>>> mensajes, envía un correo electrónico a
>>>>> [email protected].
>>>>> Para acceder a más opciones, visita https://groups.google.com/d/optout
>>>>> .
>>>>>
>>>>
>>>>  --
>>>> --
>>>> Para escribir al Grupo, hágalo a esta dirección:
>>>> [email protected]
>>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>>> ---
>>>> Has recibido este mensaje porque estás suscrito al grupo
>>>> "NHibernate-Hispano" de Grupos de Google.
>>>> Para anular la suscripción a este grupo y dejar de recibir sus
>>>> mensajes, envía un correo electrónico a
>>>> [email protected].
>>>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>>>
>>>  --
>>> --
>>> Para escribir al Grupo, hágalo a esta dirección:
>>> [email protected]
>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>> ---
>>> Has recibido este mensaje porque estás suscrito al grupo
>>> "NHibernate-Hispano" de Grupos de Google.
>>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes,
>>> envía un correo electrónico a
>>> [email protected].
>>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>>
>>  --
>> --
>> Para escribir al Grupo, hágalo a esta dirección:
>> [email protected]
>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> ---
>> Has recibido este mensaje porque estás suscrito al grupo
>> "NHibernate-Hispano" de Grupos de Google.
>> Para anular la suscripción a este grupo y dejar de recibir sus mensajes,
>> envía un correo electrónico a
>> [email protected].
>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>>
>  --
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> ---
> Has recibido este mensaje porque estás suscrito al grupo
> "NHibernate-Hispano" de Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a
> [email protected].
> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>

-- 
-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
--- 
Has recibido este mensaje porque estás suscrito al grupo "NHibernate-Hispano" 
de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía 
un correo electrónico a [email protected].
Para obtener más opciones, visita https://groups.google.com/d/optout.

Responder a