C#:如何通过 SocketAsyncEventArgs 发送非托管内存?



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

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

你看到一种方法来实现这一点吗?

使用 .Net Core 2.1+

您可以使用SetBuffer(Memory<byte>)在此处设置内存缓冲区

public void SetBuffer (Memory<byte> buffer);

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

相关内容

  • 没有找到相关文章

最新更新