Что такое NetMQ API для получения в пользовательском буфере, чтобы избежать создания нового байтового массива в каждом кадре / сообщении?

У меня есть следующий код:

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

То, что я хочу сделать, но я не могу найти в документации, это то, что позволит избежать создания нового байтового массива на каждом socket.Receive:

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

Как я могу это сделать?

1 ответ

Решение

Чтобы получить высокую производительность и нулевое распределение с NetMQ, вам нужно включить BufferPool и напрямую использовать структуру 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...
}
Другие вопросы по тегам