Revision: 4511
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4511&view=rev
Author: ayenderahien
Date: 2009-06-23 05:55:09 +0000 (Tue, 23 Jun 2009)
Log Message:
-----------
Avoiding sync overhead when it is not needed for WrapResultSet
Modified Paths:
--------------
branches/2.1.x/nhibernate/src/NHibernate/Loader/Loader.cs
Modified: branches/2.1.x/nhibernate/src/NHibernate/Loader/Loader.cs
===================================================================
--- branches/2.1.x/nhibernate/src/NHibernate/Loader/Loader.cs 2009-06-22 22:00:03 UTC (rev 4510)
+++ branches/2.1.x/nhibernate/src/NHibernate/Loader/Loader.cs 2009-06-23 05:55:09 UTC (rev 4511)
@@ -1297,8 +1297,13 @@
log.Info(st.CommandText);
// TODO NH: Callable
rs = session.Batcher.ExecuteReader(st);
- rs = WrapResultSetIfEnabled(rs, session);
+ //NH: this is checked outside the WrapResultSet because we
+ // want to avoid the syncronization overhead in the vast majority
+ // of cases where IsWrapResultSetsEnabled is set to false
+ if (session.Factory.Settings.IsWrapResultSetsEnabled)
+ rs = WrapResultSet(rs);
+
Dialect.Dialect dialect = session.Factory.Dialect;
if (!dialect.SupportsLimitOffset || !UseLimit(selection, dialect))
{
@@ -1325,25 +1330,18 @@
}
[MethodImpl(MethodImplOptions.Synchronized)]
- private IDataReader WrapResultSetIfEnabled(IDataReader rs, ISessionImplementor session)
+ private IDataReader WrapResultSet(IDataReader rs)
{
// synchronized to avoid multi-thread access issues; defined as method synch to avoid
// potential deadlock issues due to nature of code.
- if (session.Factory.Settings.IsWrapResultSetsEnabled)
+ try
{
- try
- {
- log.Debug("Wrapping result set [" + rs + "]");
- return new ResultSetWrapper(rs, RetreiveColumnNameToIndexCache(rs));
- }
- catch (Exception e)
- {
- log.Info("Error wrapping result set", e);
- return rs;
- }
+ log.Debug("Wrapping result set [" + rs + "]");
+ return new ResultSetWrapper(rs, RetreiveColumnNameToIndexCache(rs));
}
- else
+ catch (Exception e)
{
+ log.Info("Error wrapping result set", e);
return rs;
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|