Turn on logging and take a look at what's happening?

Symon.

Symon Rottem
http://blog.symbiotic-development.com


On Fri, Sep 18, 2009 at 3:06 PM, Fabio Maulo <[email protected]> wrote:

> Tuna, 8" or 2" for a Get(id) is simple unacceptable... Sravan is doing
> something wrong some where... for 2" there is a possibility... he has a big
> obj-graph and he turn-off the lazy loading.
>
> 2009/9/18 Tuna Toksoz <[email protected]>
>
>> Slow performances for the first time is ok, there is a lot going on and nh
>> is lazy in doing things, until you do something it won't create cache, to
>> name a few.
>>
>> Tuna Toksöz
>> Eternal sunshine of the open source mind.
>>
>> http://devlicio.us/blogs/tuna_toksoz
>> http://tunatoksoz.com
>> http://twitter.com/tehlike
>>
>>
>>
>>
>>   On Fri, Sep 18, 2009 at 7:23 AM, Oskar Berggren <
>> [email protected]> wrote:
>>
>>>
>>> As Tuna says, be sure to not open two sessions if you in the future
>>> create a use case where two or more objects are retrieved and edited
>>> together.
>>>
>>> Nonetheless, ten seconds for getting one object, and even two seconds
>>> on subsequent calls is ridiculous.
>>>
>>> The times you mention, are they executing time for your Get(), or for
>>> only the call to session.Get()?
>>>
>>> Does the first call include the time to configure and build the
>>> session factory? If it does, this could explain the whole or part of
>>> the 8 second difference, unless your domain model is very small.
>>>
>>> If your sql server is slow to respond on connection requests (slow
>>> server, network problem, etc.) some time difference could be explained
>>> by this, since on the second request the connection is already
>>> available thanks to connection pooling (unless you've turned that
>>> off).
>>>
>>> Now, two seconds for a subsequent call also seems overly much. Does
>>> you object have a bunch of eagerly initialized collections or other
>>> relations? How many sql queries are executed? Is connection pooling
>>> working? If you do the same SQL query manually, how long does it take?
>>> Is the database indexed properly? Does the database engine use the
>>> index?
>>>
>>> Committing the transaction when you have only fetched data seems
>>> unnecessary and unclean.
>>>
>>> /Oskar
>>>
>>>
>>>
>>> 2009/9/18 Tuna Toksoz <[email protected]>:
>>>  > What if you get two objects and save 2 times?
>>> >
>>> > Tuna Toksöz
>>> > Eternal sunshine of the open source mind.
>>> >
>>> > http://devlicio.us/blogs/tuna_toksoz
>>> > http://tunatoksoz.com
>>> > http://twitter.com/tehlike
>>> >
>>> >
>>> >
>>> >
>>> > On Fri, Sep 18, 2009 at 1:39 AM, Sravan Kumar
>>> > <[email protected]> wrote:
>>> >>
>>> >> I am following unit of work pattern. UI tier calls Business tier to
>>> get an
>>> >> entiy with ID.
>>> >>
>>> >> Gettting an objec with ID is Unit Of work in this example. I Get an
>>> entity
>>> >> bind it to UI and then do some modifications and then calls
>>> >>
>>> >> Save. Save is a another unit of work.
>>> >>
>>> >> Thank you very much .
>>> >> Sravan
>>> >>
>>> >> On Thu, Sep 17, 2009 at 6:33 PM, Tuna Toksoz <[email protected]>
>>> wrote:
>>> >>>
>>> >>> Opening a session in every operation is bad. You loose unit of work +
>>> >>> first level cache etc.
>>> >>> Don't do it.
>>> >>>
>>> >>>
>>> >>> Tuna Toksöz
>>> >>> Eternal sunshine of the open source mind.
>>> >>>
>>> >>> http://devlicio.us/blogs/tuna_toksoz
>>> >>> http://tunatoksoz.com
>>> >>> http://twitter.com/tehlike
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> On Thu, Sep 17, 2009 at 9:31 PM, sravan <
>>> [email protected]>
>>> >>> wrote:
>>> >>>>
>>> >>>> I have a Get Method that takes the ID of the entity and gives the
>>> >>>> object with that ID.
>>> >>>>
>>> >>>> In the Get Method I open a new session and calls Get on the session.
>>> >>>>
>>> >>>> the first call to get takes 10 sec, but subsequent calls to get
>>> takes
>>> >>>> just  2 seconds.
>>> >>>>
>>> >>>> I do not have second level caching enabled.
>>> >>>>
>>> >>>> I ran the sql server profiler and it is taking the same time to
>>> >>>> execute the query in both the cases.
>>> >>>>
>>> >>>> Not able to figure out why it is taking so long time for first call
>>> to
>>> >>>> get.
>>> >>>>
>>> >>>> Any help is Greatly appreciated.
>>> >>>>
>>> >>>> The second call is invoked on a different session.
>>> >>>>
>>> >>>> public virtual T Get( long ID )
>>> >>>>                {
>>> >>>>
>>> >>>>            if ( null == Interceptor ) throw new TechnicalException
>>> >>>> ( "RepositoryBase::Get: ERROR: Interceptor must be set prior to use
>>> of
>>> >>>> this class." );
>>> >>>>
>>> >>>>                        T entity = null;
>>> >>>>                        using ( ISession session =
>>> >>>> NHibernateSessionFactorySingleton.GetSession( Interceptor ) )
>>> >>>>                        {
>>> >>>>                                using ( ITransaction transaction =
>>> >>>> session.BeginTransaction( ) )
>>> >>>>                                {
>>> >>>>
>>> >>>>                                        session.FlushMode =
>>> >>>> FlushMode.Never;
>>> >>>>
>>> >>>>                                        T entity = session.Get<T>( ID
>>> );
>>> >>>>
>>> >>>>                                        transaction.Commit( );
>>> >>>>                                }
>>> >>>>
>>> >>>>                        }
>>> >>>>
>>> >>>>
>>> >>>>                        return entity;
>>> >>>>                }
>>> >>>>
>>> >>>>
>>> >>>> Sravan
>>> >>>>
>>> >>>
>>> >>>
>>> >
>>> >
>>> > >
>>> >
>>>
>>>
>>>
>>
>>
>>
>
>
> --
> Fabio Maulo
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to