public void RefCountOfPooled() { var pool = new RetainableMemoryPool <byte>(null, 16, 1024 * 1024, 50, 2); var buf = (ArrayMemory <byte>)pool.Rent(100); Assert.IsTrue(buf.IsPoolable); Console.WriteLine($"rented: {buf.ReferenceCount}"); pool.ReturnInternal(buf); Assert.IsTrue(buf.IsDisposed); Assert.IsTrue(buf.IsPooled); Console.WriteLine($"returned: {buf.ReferenceCount}"); Console.WriteLine($"pooled: {buf.IsPooled}"); Assert.Throws <ObjectDisposedException>(() => { var _ = buf.Retain(); }); pool.Dispose(); }
public void RefCountOfPooled() { var pool = new RetainableMemoryPool <Byte>(RetainableMemoryPool <Byte> .DefaultFactory); var buf = (PrivateMemory <byte>)pool.Rent(100); Assert.IsTrue(buf.IsPoolable); Console.WriteLine($"rented: {buf.ReferenceCount}"); buf.Dispose(); Assert.IsTrue(buf.IsDisposed); Assert.IsTrue(buf.IsPooled); Console.WriteLine($"returned: {buf.ReferenceCount}"); Console.WriteLine($"pooled: {buf.IsPooled}"); Assert.Throws <ObjectDisposedException>(() => { var _ = buf.Retain(); }); pool.Dispose(); }
public void PoolReturnsSameSizeUsingSlices(int maxBucketsToTry) { var pool = new RetainableMemoryPool <byte>(null, 16, 8 * 1024 * 1024, maxBuffersPerBucketPerCore: 8, maxBucketsToTry); var cw = new ConditionalWeakTable <byte[], object>(); var list = new List <ArrayMemory <byte> >(); ArraySegment <byte> prev = default; for (int r = 0; r < TestUtils.GetBenchCount(50, 5); r++) { for (int i = 0; i < TestUtils.GetBenchCount(10240, 1024); i++) { const int sizeKb = 1; var buf = (ArrayMemory <byte>)pool.Rent(sizeKb * 1024); list.Add(buf); if (!cw.TryGetValue(buf.Array, out var id)) { id = (object)i; cw.Add(buf.Array, id); } Assert.IsFalse(buf.ArraySegment.Array == prev.Array && buf.ArraySegment.Offset == prev.Offset, $"different segments at {i}"); prev = buf.ArraySegment; Assert.AreEqual(sizeKb * 1024, buf.Length, $"at {i}"); //Console.Write( // $"{i}: {(int) id} - {buf.Array.Length} - {buf.ArraySegment.Offset} - {buf.ArraySegment.Count}"); //Console.WriteLine(); //if (i > 8 && i <= 23) //{ // Assert.AreEqual(sizeKb * 2 * 1024, buf.Array.Length, $"at {i}"); // Assert.AreEqual((i & 1) * sizeKb * 1024, buf.ArraySegment.Offset, $"at {i}"); //} } foreach (var buf in list) { buf.Dispose(); //pool.Return(buf); } list.Clear(); } pool.Dispose(); }