If you have 120 databases, it seems to me like you should have a big server
there... in which case 700MB is nothing. This is 2010, 1GB costs 20 bucks.

Still... you might want to try with a single session factory and passing the
IDbConnection to the OpenSessionMethod.
And... you should really, really switch to the lastest NH version (2.1.2)

   Diego


On Sat, Jan 23, 2010 at 22:58, Mike Smith <[email protected]>wrote:

> Hello,
>
> I am hoping you nHibernate gurus can help us with our problem!
>
> We are using nHibernate version 1.2.1.4000, have many databases with
> identical schemas, and per the standard recommendation we create a
> singleton Session Factory for each database. We have an ASP.Net
> application for the UI, and a Windows Service that performs background
> operations.
>
> With over a 100 class table mappings (plus relationships and queries),
> and having over 120 databases, we are seeing our applications use an
> extraordinary amount of memory (~700MB when all 120+ Session Factories
> have been created). Using CLR Profiler, it appears nearly all of the
> memory on the heap is chewed up from the string data generated from
> nHibernate SessionFactoryImpl (hashtables, sqlstrings, loaders, etc.)
> which means it will never get cleaned up until the application is shut
> down. I did verify that we have the correct number of session
> factories (1 per db) so that code is working fine.
>
> For our situation, it would be ideal and more efficient to only have
> to load the mappings one time, and be able to use them across all of
> our databases.
>
> The big question: Assuming we are not using the Second Level Cache, is
> it possible/safe to use the same Session Factory for all of our
> databases? Do other people do this? If so, I assume we would have to
> handle the connection management...any thoughts on that?
>
> If not, how do people handle this? Our number of databases and
> mappings are going to continue to grow and we need to act now. Can you
> think of any ways to make this more efficient? I suppose we could
> start disposing of Session Factory's if they aren't used for a while,
> but it would be a shame to have the delay, and in peak usage time it
> may not help at all. Are there any config settings that would help
> balance out memory usage vs delay of loading? Maybe new features in
> the latest nHibernate release which would help us out?
>
> Our configuration settings:
>  <nhibernate>
>    <add key="hibernate.connection.provider"
> value="NHibernate.Connection.DriverConnectionProvider"/>
>    <add key="hibernate.dialect"
> value="NHibernate.Dialect.MsSql2005Dialect" />
>    <add key="hibernate.connection.driver_class"
> value="NHibernate.Driver.SqlClientDriver"/>
>    <add key="hibernate.show_sql" value="false" />
>    <add key="hibernate.max_fetch_depth" value="3" />
>  </nhibernate>
>
> Our code for creating a new SessionFactory (if it doesn't already
> exist):
> Configuration config = new Configuration();
> config.AddAssembly("Assembly.Name");
> config.SetProperty("hibernate.connection.connection_string",
> connectionString);
> sessionFactory = config.BuildSessionFactory();
> sessionFactoryDictionary.Add(connection_name, sessionFactory);
>
> Thanks so much!
> Mike
>
> --
> 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]<nhusers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>
>

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