私はC#言語でZeroMQを使用しています。それは次のエラーを投げている:OutOfMemoryException:zmq_msg_init_size(ProcessMemoryは4 GBまで増加し続けました)
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
を送信したいだけであることにご注意ください。私は最良の方法を知らないので、ZFrame
とZMessage
オブジェクトを作成しました。
Visual Studioデバッガの内部で、プロセスメモリが増加し続けており、最大で4 GB
になっていることがわかりました。この時点でエラーがスローされています。
bytearrayをどのように宣言/初期化しましたか?それは空ですか? ZFrame(https://github.com/zeromq/clrzmq4/blob/master/ZFrame.cs)の実装を見ると、ZFrameの構築時に特定の状況下で上記例外がスローされます。 –
@KerriBrown:基本的に、バイト配列は 'onDataArrived'コールバック関数の内部で作成されます。私は 'bytearray'の長さを調べました。約4,700,000バイトです。 –
@mjwills:いいえ私はそうではありません。私はそれを知らない。上記のように 'zmqContext'と' publisher'を初期化しました。次に、私は 'publisher'を使ってコールバック関数のように' message'を送ります。私はちょうど 'bytearray'を送りたいと思います。私は最良の方法を知らないので、私は 'ZFrame'と' ZMessage'オブジェクトを作成しました。 –