public override T Pop() { OOMSoftReference <T> reference = (OOMSoftReference <T>)_freeList.Dequeue(); T value = reference.Get(); reference.Clear(); _spareReferences.Enqueue(reference); return(value); }
protected override void AddToFreeList(T value) { OOMSoftReference <T> reference = default(OOMSoftReference <T>); if (_spareReferences.Count != 0) { reference = _spareReferences.Dequeue(); } else { reference = new OOMSoftReference <T>(); } reference.Set(value); _freeList.Enqueue(reference); }
/// <summary> /// Instantiates the <see cref="SharedByteArray"/>. /// </summary> /// <param name="memoryTrimmableRegistry"> /// A class to be notifiedof system memory events. /// </param> /// <param name="args">The pool params.</param> public SharedByteArray( IMemoryTrimmableRegistry memoryTrimmableRegistry, PoolParams args) { Preconditions.CheckNotNull(memoryTrimmableRegistry); Preconditions.CheckArgument(args.MinBucketSize > 0); Preconditions.CheckArgument(args.MaxBucketSize >= args.MinBucketSize); _maxByteArraySize = args.MaxBucketSize; _minByteArraySize = args.MinBucketSize; _byteArraySoftRef = new OOMSoftReference <byte[]>(); _resourceReleaser = new ResourceReleaserImpl <byte[]>(value => { _semaphore.Release(); }); memoryTrimmableRegistry.RegisterMemoryTrimmable(this); }