OutOfMemoryException:zmq_msg_init_size(ProcessMemory保持增加到4 GB)

时间:2017-11-23 10:41:51

标签: c# zeromq

我在C#语言中使用ZeroMQ。它抛出以下错误:

OutOfMemoryException: zmq_msg_init_size

以下是代码段:

private void onDataArrived(object sender, DataArrivedEventArgs e)
{
    // receive the data in the form of bytearray
    var message = new ZMessage{ new ZFrame(bytearray) };

    publisher.Send(message);
}

onDataArrived是一个回调函数。发布者在类构造函数中定义如下:

zmqContext = new ZContext();
publisher = new ZSocket(zmqContext, ZSocketType.PUB);
publisher.Bind("tcp://*:9001"); // Using depth data port

有什么建议吗?

我是否需要销毁 message

请注意,我只想发送bytearray。由于我不了解最佳方式,因此我创建了ZFrameZMessage个对象。

在Visual Studio调试器中,我注意到进程内存不断增加并上升到4 GB。此时正在抛出错误。

1 个答案:

答案 0 :(得分:2)

ZFrame实施IDisposable。作为常规规则,当您“完成”它们时,您应该DisposeIDisposable个对象。

ZFrame尤为重要,因为它包含DispoIntPtr(指向非托管内存的指针)。

如果没有Dispose电话,则不会及时释放。见https://github.com/zeromq/clrzmq4/blob/master/ZFrame.cs

protected override void Dispose(bool disposing)
{
    if (framePtr != null)
    {
        if (framePtr.Ptr != IntPtr.Zero)
        {
            Close();  // <- cleanup happening here
        }
    }
    GC.SuppressFinalize(this);
    base.Dispose(disposing);
}