Что такое 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...
}