You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by ni...@apache.org on 2005/01/28 21:51:06 UTC

cvs commit: logging-log4net/src/Util AppenderAttachedImpl.cs

nicko       2005/01/28 12:51:06

  Modified:    src/Util AppenderAttachedImpl.cs
  Log:
  Cache the appenders list in an array for performance
  
  Revision  Changes    Path
  1.5       +22 -4     logging-log4net/src/Util/AppenderAttachedImpl.cs
  
  Index: AppenderAttachedImpl.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/src/Util/AppenderAttachedImpl.cs,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AppenderAttachedImpl.cs	17 Jan 2005 20:18:47 -0000	1.4
  +++ AppenderAttachedImpl.cs	28 Jan 2005 20:51:06 -0000	1.5
  @@ -55,12 +55,19 @@
   			{
   				throw new ArgumentNullException("loggingEvent");
   			}
  +
  +			// m_appenderList is null when empty
   			if (m_appenderList == null) 
   			{
   				return 0;
   			}
   
  -			foreach(IAppender appender in m_appenderList)
  +			if (m_appenderArray == null)
  +			{
  +				m_appenderArray = m_appenderList.ToArray();
  +			}
  +
  +			foreach(IAppender appender in m_appenderArray)
   			{
   				try
   				{
  @@ -93,6 +100,7 @@
   				throw new ArgumentNullException("newAppender");
   			}
   	
  +			m_appenderArray = null;
   			if (m_appenderList == null) 
   			{
   				m_appenderList = new AppenderCollection(1);
  @@ -121,7 +129,7 @@
   				}
   				else 
   				{
  -					return m_appenderList;
  +					return AppenderCollection.ReadOnly(m_appenderList);
   				}
   			}
   		}
  @@ -170,8 +178,8 @@
   						LogLog.Error("AppenderAttachedImpl: Failed to Close appender ["+appender.Name+"]", ex);
   					}
   				}
  -				m_appenderList.Clear();
   				m_appenderList = null;	  
  +				m_appenderArray = null;
   			}
   		}
   
  @@ -190,6 +198,11 @@
   			if (appender != null && m_appenderList != null) 
   			{
   				m_appenderList.Remove(appender);
  +				if (m_appenderList.Count == 0)
  +				{
  +					m_appenderList = null;
  +				}
  +				m_appenderArray = null;
   			}
   			return appender;
   		}
  @@ -214,10 +227,15 @@
   		#region Private Instance Fields
   
   		/// <summary>
  -		/// Array of appenders
  +		/// List of appenders
   		/// </summary>
   		private AppenderCollection m_appenderList;
   
  +		/// <summary>
  +		/// Array of appenders, used to cache the m_appenderList
  +		/// </summary>
  +		private IAppender[] m_appenderArray;
  +
   		#endregion Private Instance Fields
   	}
   }