/// <summary>
 /// This method adds a counter to the collection.
 /// </summary>
 /// <param name="item"></param>
 public void Add(IXimuraPerformanceCounter item)
 {
     lock (syncObject)
     {
         mPerformanceCounters.Add(item);
     }
 }
 /// <summary>
 /// This method returns true if the item in in the collection.
 /// </summary>
 /// <param name="item">The item to check.</param>
 /// <returns>Returns true if the item is in the collection.</returns>
 public bool Contains(IXimuraPerformanceCounter item)
 {
     lock (syncObject)
     {
         return mPerformanceCounters.Contains(item);
     }
 }
 /// <summary>
 /// This method removes an item from the collection.
 /// </summary>
 /// <param name="item">The item to remove.</param>
 /// <returns>Return true if the item is successfully removed.</returns>
 public bool Remove(IXimuraPerformanceCounter item)
 {
     lock (syncObject)
     {
         return mPerformanceCounters.Remove(item);
     }
 }
        /// <summary>
        /// This is the generic enumerator for the collection.
        /// </summary>
        /// <returns>Returns an lock-free enumerator for the collection.</returns>
        public IEnumerator<IXimuraPerformanceCounter> GetEnumerator()
        {
            IXimuraPerformanceCounter[] array = null;
            int len = 0;

            lock (syncObject)
            {
                len = mPerformanceCounters.Count;

                if (len > 0)
                {
                    array = new IXimuraPerformanceCounter[len];
                    mPerformanceCounters.CopyTo(array, len);
                }
            }

            if (len == 0)
                yield break;

            foreach (IXimuraPerformanceCounter counter in array)
                yield return counter;
        }
 /// <summary>
 /// This method copies the collection to the array passed.
 /// </summary>
 /// <param name="array">The array.</param>
 /// <param name="arrayIndex">The position in the index to begin copying.</param>
 public void CopyTo(IXimuraPerformanceCounter[] array, int arrayIndex)
 {
     lock (syncObject)
     {
         mPerformanceCounters.CopyTo(array, arrayIndex);
     }
 }