MemoryPool<byte>.Rent能否返回更大IMemoryOwner<byte>及Length取值规则
关于
MemoryPool<byte>.Rent方法的两个疑问解答 问题一:Rent方法是否可能返回大于申请最小大小的IMemoryOwner<byte>实例
答案是肯定的。MemoryPool<byte>.Rent(int minBufferSize)的入参minBufferSize明确是最小缓冲区要求,池化内存的设计逻辑就是复用已经分配的大块内存减少GC开销,因此实现方完全可以返回容量大于minBufferSize的内存块,不需要严格匹配你申请的最小值,这是符合官方设计规范的行为。
问题二:IMemoryOwner<byte>.Memory.Length返回的是申请值还是内部实际缓冲区大小
该属性返回的是当前你可以安全使用的缓冲区的实际大小,这个值一定大于等于你传入的minBufferSize,不是你申请的那个最小值。
举个实际场景例子:如果你调用MemoryPool<byte>.Shared.Rent(1000),池内如果有空闲的2048字节大小的块,就会直接返回这个块,此时你拿到的IMemoryOwner<byte>.Memory.Length就是2048,这2048字节你都可以正常读写,不需要限制只用前1000字节。
内容的提问来源于stack exchange,提问作者Perfect28
相关产品推荐
相关产品推荐

