private void ReleaseOneResource(Queue <RcInfo> rcs) { RcInfo rc = rcs.Dequeue(); rc.Resource.Dispose(); //Debug.WriteLine("Dispose Resource {0},Count={1}!", rc.ResourceId, rcs.Count); }
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); }