ArrayPool简介
.NET 中频繁创建和销毁数组的情况下会导致垃圾回收器出现严重的内存压力,ArrayPool 通过池化手段有效地降低了数组的分配和垃圾回收器的回收压力,同时 ArrayPool 也是 MemoryPool 和 PipeWriter、PipeReader 的底板。
ArrayPool.Shared 是 ArrayPool 的一种实现,它设计成静态共享以供全体共同使用。在实际应用中, Shared 实例几乎承载了全部的 ArrayPool 调用。
Shared实例的Rent
- static void RentAndReturn(int size)
- {
- var pool = ArrayPool<byte>.Shared;
- var array = pool.Rent(size);
- // 在这里使用 array
- pool.Return(array);
- }
复制代码 其中输入的 size 和 Rent 得到 array.Length的关系如下:
[code]var index = SelectBucketIndex(size);var arrayLenth = GetMaxSizeForBucket(index);static int SelectBucketIndex(int size){ return BitOperations. Log2((uint)((size - 1) | 0xF)) - 3; }static int GetMaxSizeForBucket(int bucketIndex){ return 16 |