0

我有视频数据,并定期为许多客户生成新帧。我从库中获取帧作为 IntPtr 和表示字节数组大小的 int 。目前我正在把它变成一个“内存”并通过 NetworkStream 发送它,一旦我拥有它就实现了相当大的缓冲区的零复制。

我想尝试使用 SocketAsyncEventArgs 做同样的事情,看看它是否表现更好,并为多个客户端尝试这些 UserTokens。但是,我不知道如何告诉 SocketAsyncEventArgs 发送由 IntPtr 指向的内存块,其中 int 表示已知大小,同时保持零拷贝。似乎一些聪明的编组或“MemoryMarshal”应该可以解决问题,但我没有看到。

你有没有办法做到这一点?

4

1 回答 1

1

使用 .Net Core 2.1+

您可以使用SetBuffer(Memory<byte>) see here设置内存缓冲区

public void SetBuffer (Memory<byte> buffer);

在 .Net Framework 中,您需要将其复制到byte[]. 但正如上面的评论所说,这不会是你的瓶颈。

于 2020-01-11T02:48:14.240 回答