我有视频数据,并且定期为许多客户端生成新帧。我从库中获取帧作为 IntPtr 和一个表示字节数组大小的 int。目前,我正在将其转换为"内存",并通过NetworkStream发送它,一旦我拥有它,就可以实现相当大的缓冲区的零复制。
我想尝试使用SocketAsyncEventArgs做同样的事情,看看它的性能是否更好,并为多个客户端尝试这些UserTokens。但是,我不知道如何告诉 SocketAsyncEventArgs 发送由 IntPtr 指向的内存块,其中 int 表示已知大小,同时保持零副本。似乎一些聪明的编组或"记忆元帅"应该可以解决问题,但我没有看到它。
你看到一种方法来实现这一点吗?
使用 .Net Core 2.1+
您可以使用SetBuffer(Memory<byte>)
在此处设置内存缓冲区
public void SetBuffer (Memory<byte> buffer);
在.Net Framework中,您需要将其复制到byte[]
。 但正如上面的评论所述,这不会成为你的瓶颈。