From: <aye...@us...> - 2009-06-23 05:55:20
|
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. |