【发布时间】:2019-03-20 09:20:47
【问题描述】:
我有以下结构:
[StructLayout(LayoutKind.Sequential)]
struct Message
{
int Header;
int Data;
}
我想通过网络发送它,而不需要分配(使用SendAsync(ReadOnlyMemory<byte>))调用。
如何从给定的结构中获取Memory<byte>?
我最终得到了Span<byte>,然后卡住了。
var message = new Message {
Header = 1, Data = 3
};
var bytes = MemoryMarshal.AsBytes(
MemoryMarshal.CreateReadOnlySpan(ref message, 1)
);
有什么方法可以直接将结构放入流中而不进行任何分配?
我在netcoreapp2.1。
【问题讨论】:
-
跨度只能存在于堆栈上。异步方法需要其参数至少与任务本身一样长。因此,如何确保 span 确实存在到任务结束?你不能,因此为什么这些方法使用 Memory
,它可以活得更久。这意味着无论如何你都需要复制它。 -
@EtiennedeMartel 我的
message无论如何都在 AsyncStateMachine 中被捕获 - 它不是ref struct。 -
总之,标题有误导性。我会更新的。
标签: c# .net-core system.memory