C# 为了避免在每个帧/消息上创建新的字节数组,在自定义缓冲区中接收的NetMQ API是什么?

C# 为了避免在每个帧/消息上创建新的字节数组,在自定义缓冲区中接收的NetMQ API是什么?,c#,.net,zeromq,netmq,C#,.net,Zeromq,Netmq,我有以下代码: while (!isCancellationRequested) { byte[] frameBytes = socket.ReceiveFrameBytes(); MyData data = new MyData(); data.Deserialize(frameBytes); // send the data somewhere somehow... } 我想做的是,但在文档中找不到可以避免在每个套接字上创建新字节数组的内容。Receive:

我有以下代码:

while (!isCancellationRequested)
{
    byte[] frameBytes = socket.ReceiveFrameBytes();
    MyData data = new MyData();
    data.Deserialize(frameBytes);
    // send the data somewhere somehow...
}
我想做的是,但在文档中找不到可以避免在每个
套接字上创建新字节数组的内容。Receive

byte[] frameBytes = new byte[123];
while (!isCancellationRequested)
{
    socket.ReceiveFrameBytes(frameBytes);
    MyData data = new MyData();
    data.Deserialize(frameBytes);
    // send the data somewhere somehow...
}

如何做到这一点?

要使用NetMQ获得高性能和零分配,您需要启用缓冲池并直接使用Msg结构

BufferPool.SetBufferManagerBufferPool(1024 * 1024, 1024);    

while (!isCancellationRequested)
{
    Msg msg = new Msg();
    msg.InitEmpty();
    socket.Receive(ref msg);
    MyData data = new MyData();
    data.Deserialize(msg.Data, msg.Size);
    msg.Close();
    // send the data somewhere somehow...
}