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
>>>>
>>>
>>>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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