- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下结构:
[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<Message> valSpan = stackalloc Message[1];
valSpan[0] = new Message { Header = 123, Data = 456 };
Span<byte> bytes = MemoryMarshal.Cast<Message, byte>(valSpan); // has length 8
注意我在这里使用 Span<T>
。如果需要,您可以使用 Memory<T>
做大部分相同的事情 - 但您需要一个支持数组或类似的东西,这通常需要分配 - 如果不是数组,那么是自定义 MemoryManager<T>
:
var arr = new Message[1];
arr[0] = new Message { Header = 123, Data = 456 };
Memory<byte> bytes = MemoryMarshal.Cast<Message, byte>(arr); // has length 8
本质上,你离这里很近:
MemoryMarshal.CreateReadOnlySpan(ref message, 1)
不过,诀窍是使用 MemoryMarshal.Cast<TFrom, byte>(...)
来获取一段字节。
关于c# - 结构为 ReadOnlyMemory<byte> 表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52825341/
我有以下结构: [StructLayout(LayoutKind.Sequential)] struct Message { int Header; int Data; } 我想通
给定 ReadOnlyMemory Struct我想将流转换为字符串 我有以下代码: var body = ea.Body; //ea.Body is of Type ReadOnlyMemory v
我使用 .NET Core 3.0 的 JsonDocument.Parse(ReadOnlyMemory, JsonReaderOptions)将 WS 消息 ( byte[] ) 解析为 JSON
我使用 .NET Core 3.0 的 JsonDocument.Parse(ReadOnlyMemory, JsonReaderOptions)将 WS 消息 ( byte[] ) 解析为 JSON
我是一名优秀的程序员,十分优秀!