Pool.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Runtime / Pool.cs / 1305376 / Pool.cs

                            //------------------------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------

namespace System.Activities.Runtime 
{
    using System; 
    using System.Runtime; 

    // Pool defined below is a LIFO pool of Pool.IClearable objects. 
    // It is strongly typed to make the Acquire/Release methods more user
    // friendly.  To use this pool, subclass it with a concrete type and
    // override the CreateNew method.  Typically, the type of T will
    // have a default ctor and will use an Initialize(...) method in order 
    // to configure it for use.
    // NOTE: CreateNew is required because T : new() requires that the default 
    // ctor is public.  We did not want to put public ctors on some of our 
    // pooled resources (like NativeActivityContext).
 

    abstract class Pool
    {
        const int DefaultPoolSize = 10; 

        T[] items; 
        int count; 
        int poolSize;
 
        public Pool()
            : this(DefaultPoolSize)
        {
        } 

        public Pool(int poolSize) 
        { 
            this.items = new T[poolSize];
            this.poolSize = poolSize; 
        }

        public T Acquire()
        { 
            if (this.count > 0)
            { 
                this.count--; 
                T item = this.items[this.count];
 
                return item;
            }
            else
            { 
                return CreateNew();
            } 
        } 

        protected abstract T CreateNew(); 

        public void Release(T item)
        {
            if (this.count < this.poolSize) 
            {
                this.items[this.count] = item; 
                this.count++; 
            }
        } 
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK