Example #1
0
        public override T Pop()
        {
            OOMSoftReference <T> reference = (OOMSoftReference <T>)_freeList.Dequeue();
            T value = reference.Get();

            reference.Clear();
            _spareReferences.Enqueue(reference);
            return(value);
        }
Example #2
0
        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);
        }