能否从
Memory<byte>
创建一个 struct
而不必将其复制到数组中?或者更好的方法是创建一个共享相同托管内存的 struct
和 Memory<byte>
?
从字节数组中读取 C/C++ 数据结构的方法在 C# 中几乎可行,但不完全适用。 Memory<T>
有一个 Pin
方法,但它返回一个 MemoryHandle
而不是一个 GCHandle
。
XY: 我从套接字读取和写入 Memory<byte>
,使用从切片获取的范围上的 BinaryPrimitives
来获取和设置各个字段。将 Memory
表示为 struct
将更加美观。
MemoryMarshall.Cast
将Span<byte>
转换为Span<struct>
而无需复制字节 - 至少,我认为这是目前语法(非常文档化不好)。 - NetMagebyte[]
而是操纵内存。也不清楚您是否真正执行了我提到的转换,这使人怀疑C#是否是您问题的好语言。 - jpmc26Memory<byte>
而不是byte[]
作为缓冲区与SocketAsyncEventArgs
一起工作的首选方式。此处讨论的API(https://github.com/dotnet/corefx/issues/17281)存在于2.2中,尽管它没有记录。实际上,`SetBuffer`的几个未记录重载将其参数转换为`Memory<byte>并设置
MemoryBuffer属性,而不是旧的
Buffer`属性。 - StackOverthrowMemory<byte>
和Span<byte>
更易于处理。整个标准API似乎都倾向于优先使用它们而不是byte[]
,只是文档没有跟上。 - StackOverthrow