怎么把ReadOnlyMemory转换成IMemoryOwner?

时间:2019-05-04 17:23:36

标签: c# .net-core

我计划使用一种基本上类似于

的数据结构
public readonly struct Wrapper //: IDisposable, IEquatable<Wrapper>, ...
{
    /// <summary>
    /// The actual data.
    /// </summary>
    private IMemoryOwner<byte> Data { get; }

    public Wrapper(IMemoryOwner<byte> data)
    {
       Data = data;
    }

    public Wrapper(ReadOnlyMemory<byte> data)
    {
        Data = data;
    }
}

包装可能使用MemoryPool<byte>池化的,因此具有IMemoryOwnerArrayPool<byte>类型或与var someData = new byte[0];一起分配的内存。

这个想法是为了提供一种更方便的访问方式,该访问方式是临时分配或从某种类型的池中租用的字节块。该字节数据将具有某些模式(已在构造函数中检查),并且长度可能有所不同。

使用IMemoryOwnerReadOnlyMemory表示拥有数据所有权并进行处置会在租赁时将其返回到池中,因此从这种角度看,这种设计似乎是正确的。

但是我是否忽略了某些东西,因为将ReadOnlyMemory变成IMemoryOwner似乎并不简单?如何实现?

ReadOnlyMemory<byte>捕获了不可变内存存储区的意图,但是除了作为构造函数参数提供时假定拥有它的所有权之外,谁不拥有该内存。

ReadOnlyMemory和/或该类型应该继承自IMemoryOwner,并且可能实现一个自定义的内存池。

1 个答案:

答案 0 :(得分:0)

在这里似乎选择使用自定义池。具体来说,NonAllocatingPool<T> : MemoryPool<T>y = 20 x = ('percentage: %i', 20) x = f'percentage: {y}' 的选择。