C#:如何通过SocketAsyncEventArgs发送非托管内存?
我有视频数据,并定期为许多客户生成新帧。我从库中得到的帧是一个IntPtr和一个表示字节数组大小的int。目前,我正在将其转化为一个“内存”,并通过网络流发送它,一旦我有了它,就可以实现对相当大的缓冲区的零拷贝 我想尝试使用SocketAsyncEventArgs做同样的事情,看看它是否性能更好,并为多个客户端尝试这些UserToken。但是,我不知道如何告诉SocketAsyncEventArgs发送IntPtr指向的内存块,其中int表示已知大小,同时保持零拷贝。似乎是一些聪明的编组或“记忆玛莎”应该做的把戏,但我没有看到它 您看到实现这一点的方法了吗?使用.Net Core 2.1+ 您可以使用C#:如何通过SocketAsyncEventArgs发送非托管内存?,c#,sockets,memory,marshalling,socketasynceventargs,C#,Sockets,Memory,Marshalling,Socketasynceventargs,我有视频数据,并定期为许多客户生成新帧。我从库中得到的帧是一个IntPtr和一个表示字节数组大小的int。目前,我正在将其转化为一个“内存”,并通过网络流发送它,一旦我有了它,就可以实现对相当大的缓冲区的零拷贝 我想尝试使用SocketAsyncEventArgs做同样的事情,看看它是否性能更好,并为多个客户端尝试这些UserToken。但是,我不知道如何告诉SocketAsyncEventArgs发送IntPtr指向的内存块,其中int表示已知大小,同时保持零拷贝。似乎是一些聪明的编组或“记忆
SetBuffer(内存)
public void SetBuffer(内存缓冲区);
在.Net Framework中,您需要将其复制到
字节[]
。但是如上所述,这不会成为您的瓶颈。您需要将IntPtr复制到字节数组,然后发送数组:byte[]data=new byte[1024];封送处理副本(源,数据,0,数据长度);其中源是IntPtr。内存拷贝不会成为瓶颈。该网络将是。
public void SetBuffer (Memory<byte> buffer);