我想将一个字符串转换为只读内存对象。将字符串转换为只读内存对象很容易(使用.AsMemory()),但没有直接的方法将其转换为字节类型,也没有直接将字符串转换的方法。
var text=".....";
var writer=new ArrayBufferWrite(8192);
Encoding.UTF8.GetBytes(text,writer);
var memory=writer.WrittenMemory;
WrittenMemory 返回一个包含写入数据的 ReadOnlyMemory<T>
对象。
可以使用 Reset() 清空缓冲区并重用:
var writer=new ArrayBufferWrite(8192);
while(true)
{
writer.Reset();
var text=SomehowGetString();
Encoding.UTF8.GetBytes(text,writer);
var memory=writer.WrittenMemory;
...
}
var memory = new ReadOnlyMemory<byte>(Encoding.UTF8.GetBytes(str));
Encoding.GetBytes()
会创建一个新的缓冲区,那么使用ReadOnlyMemory
有什么意义呢? - Panagiotis KanavosIBufferWriter
的GetBytes扩展方法,例如ArrayBufferWritter或PipelineWriter。这样可以在调用之间重复使用缓冲区。您可以使用WrittenMemorry来获取字节。 - Panagiotis Kanavos
Memory<>
?这很重要。最好直接写入PipeWriter
,而不是创建一个中间缓冲区。Memory<>
、Span<>
和管道的整个目的是通过缓冲区重用来提高内存效率。 - Panagiotis Kanavosbyte[]
缓冲区。应该是你的代码应该重用缓冲区。那个API是否有一个接受PipeReader
而不是ReadOnlyMemory<>
的方法?那将更加高效。 - Panagiotis Kanavos