优化对象池设计并新增性能与单元测试
石头 authored at 2025-09-20 08:32:20
815.00 B
X
using System.Collections.Concurrent;
using NewLife.Collections;
using Xunit;

namespace XUnitTest.Collections;

public class PoolTests
{
    [Fact(DisplayName = "Pool 并发压力测试")]
    public void ConcurrentGetReturn()
    {
        var pool = new Pool<Object>(64);
        var bag = new ConcurrentBag<Object>();
        var threadCount = 8;
        var loop = 10_000;
        Parallel.For(0, threadCount, _ =>
        {
            for (var i = 0; i < loop; i++)
            {
                var obj = pool.Get();
                bag.Add(obj);
                Assert.NotNull(obj);
            }
        });

        // 归还所有对象
        foreach (var obj in bag) pool.Return(obj);

        // 池容量不超限
        var count = pool.Clear();
        Assert.True(count <= pool.Max);
    }
}