Exemple #1
0
        private void ReleaseOneResource(Queue <RcInfo> rcs)
        {
            RcInfo rc = rcs.Dequeue();

            rc.Resource.Dispose();
            //Debug.WriteLine("Dispose Resource {0},Count={1}!", rc.ResourceId, rcs.Count);
        }
Exemple #2
0
        private RcInfo TakeOneResource(TKey oringalKey)
        {
            RcInfo         rc   = null;
            string         rcId = this.TakeResourceId(oringalKey);
            Queue <RcInfo> rcs;

            lock (this)
            {
                if (poolMap.TryGetValue(rcId, out rcs))
                {
                    if (rcs.Count > 0)
                    {
                        rc = rcs.Dequeue();
                        //Debug.WriteLine("Reuse Resource {0},Count={1}!", rcId, rcs.Count);
                    }
                }


                if (rc == null)
                {
                    //Debug.WriteLine("{0}: Create New Resource {1}!", GetType(),rcId);
                    rc = new RcInfo()
                    {
                        ResourceId = rcId, Resource = createMethod(oringalKey), RefCount = 0, OriginKey = oringalKey
                    };
                }
            }
            return(rc);
        }