问题描述
我目前正在使用以下代码段将 UTF8 编码字符串写入性能关键部分中的网络流:
private static readonly ArrayPool<byte> POOL = ArrayPool<byte>.Shared;
private static readonly Encoding ENCODING = Encoding.UTF8;
private async ValueTask Write(string text)
{
var length = ENCODING.GetByteCount(text);
var buffer = POOL.Rent(length);
try
{
ENCODING.GetBytes(text,length,buffer,0);
await OutputStream.WriteAsync(buffer.AsMemory(0,length)).ConfigureAwait(false);
}
finally
{
POOL.Return(buffer);
}
}
我的感觉是,使用基于 Span<T>
和 Memory<T>
的重载之一可以更有效地编写它,甚至可以免分配,但我不知道如何。
我的理解是,我可以以某种方式将字符串的 Span<char>
表示动态转换为可以传递给流的内容(例如 ReadOnlyMemory<byte>
,而无需使用中间缓冲区(既没有分配也没有租用) - 所以只需访问字符串的底层字节(已经为它们分配了内存 - 为什么我需要分配新的?)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)